小编Unk*_*own的帖子

Event Loop vs Multithread阻塞IO

我正在阅读有关服务器架构的评论.

http://news.ycombinator.com/item?id=520077

在这篇评论中,这个人说了三件事:

  1. 事件循环,一次又一次,已被证明真正为大量低活动连接发光.
  2. 相比之下,与事件循环相比,一次又一次地显示了具有线程或进程的阻塞IO模型,以减少基于每个请求的延迟.
  3. 在轻载系统上,差异无法区分.在负载下,大多数事件循环选择减速,大多数阻塞模型选择减少负载.

这些都是真的吗?

还有另一篇文章标题为"为什么事件是一个坏主意(对于高并发服务器)"

http://www.usenix.org/events/hotos03/tech/vonbehren.html

io events http blocking

23
推荐指数
1
解决办法
6768
查看次数

如何在使用shared_ptr时检测周期

shared_ptr是Boost库中的引用计数智能指针.

引用计数的问题在于它不能处理循环.我想知道如何用C++解决这个问题.

请不要这样的建议:"不要制作周期",或"使用weak_ptr".

编辑

我不喜欢只使用weak_ptr的建议,因为很明显,如果你知道你会创建一个循环,那么你就不会有问题.如果在运行时生成shared_ptrs,您也无法知道编译时会有一个循环.

所以,请自行删除使用weak_ptr的答案,因为我特别要求不要那些答案......

c++ garbage-collection reference-counting shared-ptr

21
推荐指数
4
解决办法
6589
查看次数

变量大小的Struct C++

这是在C++中制作可变大小结构的最佳方法吗?我不想使用vector,因为初始化后长度不会改变.

struct Packet
{
    unsigned int bytelength;
    unsigned int data[];
};

Packet* CreatePacket(unsigned int length)
{
    Packet *output = (Packet*) malloc((length+1)*sizeof(unsigned int));
    output->bytelength = length;
    return output;
}
Run Code Online (Sandbox Code Playgroud)

编辑:重命名变量名称和更改的代码更正确.

c++ struct variable-length

20
推荐指数
4
解决办法
2万
查看次数

Code Golf:Automata

我使用这些规则制作了终极笑发生器.你能用聪明的方式用自己喜欢的语言实现它吗?

规则:

在每次迭代时,都会发生以下转换.

H   -> AH
A   -> HA
AA  -> HA
HH  -> AH
AAH -> HA
HAA -> AH
Run Code Online (Sandbox Code Playgroud)

n = 0 |  H
n = 1 |  AH
n = 2 |  HAAH
n = 3 |  AHAH
n = 4 |  HAAHHAAH
n = 5 |  AHAHHA
n = 6 |  HAAHHAAHHA
n = 7 |  AHAHHAAHHA
n = 8 |  HAAHHAAHHAAHHA
n = 9 |  AHAHHAAHAHHA
n = ...
Run Code Online (Sandbox Code Playgroud)

puzzle code-golf automata rosetta-stone

19
推荐指数
3
解决办法
1698
查看次数

函数后const如何优化程序?

我见过这样的方法:

void SomeClass::someMethod() const;
Run Code Online (Sandbox Code Playgroud)

这个const声明做了什么,它如何帮助优化程序?

编辑

我看到之前已经问过这个问题的第一部分...... 但是,它仍然没有回答第二部分:这将如何优化程序?

c++ optimization const keyword

18
推荐指数
2
解决办法
1万
查看次数

如何在RabbitMQ服务器上设置超时检测?

我正在尝试使用这个 python绑定RabbitMQ.

我注意到的一件事是,如果我不洁净地杀死一个消费者(模仿一个崩溃的程序),服务器会认为这个消费者仍然存在很长时间.结果是每个其他消息都将被忽略.

例如,如果您杀死消费者1次并重新连接,则将忽略1/2消息.如果您杀死另一个消费者,则将忽略2/3消息.如果你杀了第3个,那么将忽略3/4个消息,依此类推.

我试过打开确认,但它似乎没有帮助.我找到的唯一解决方案是手动停止服务器并重置它.

有没有更好的办法?

如何重新创建此方案

  • 运行rabbitmq.

  • 取消归档此库.

  • 此处下载消费者和发布者.运行amqp_consumer.py两次.运行amqp_publisher.py,输入一些数据并观察它是否按预期工作.消息以循环方式接收.

  • 使用kill -9或任务管理器杀死其中一个使用者进程.

  • 现在,当您发布消息时,50%的消息将丢失.

python message-queue amqp rabbitmq

17
推荐指数
3
解决办法
1万
查看次数

如何编写可在Linux和Windows中轻松编译的C++程序?

我正在制作一个C++程序.

我对C++最大的烦恼之一就是它假定的平台独立性.

你们都可能知道,在Windows中编译Linux C++程序和在Linux中编译Linux C++程序几乎是不可能的,而不会产生大量的神秘错误和平台特定的包含文件.

当然你可以随时切换到像Cygwin和wine这样的仿真,但我问你,有没有别的办法?

c c++ linux windows platform

16
推荐指数
3
解决办法
6149
查看次数

程序员程序员的功能代码片段列表?

有时我仍然试图将过程代码转换为功能代码.

是否有一个功能成语/片段列表映射到程序习语/片段?

编辑

由于似乎没有这些片段的集中式网站,我将其转变为社区维基.请在此粘贴任何程序 - >功能片段.

f# ocaml haskell functional-programming code-snippets

16
推荐指数
1
解决办法
1308
查看次数

如何展开(编译)解释器循环?

我听说有些语言通过"展开解释器循环"从解释到编译.

假设我为ast树提供了以下伪c代码解释器.

int interpret(node)
{
    switch(node) {
        case PLUS:
             return interpret(child(0))+interpret(child(1));
        case MINUS:
             return interpret(child(0))-interpret(child(1));       
    }
}
Run Code Online (Sandbox Code Playgroud)

如何展开此循环以创建已编译的程序?

我看到你们所有人都在低调,因为我不知道我在说什么,但这里有一篇来自维基百科的文章,其中说明了我所描述的内容.

"因子最初只被解释,但现在已完全编译(非优化编译器基本上解开了解释器循环"

c compiler-construction optimization interpreter programming-languages

14
推荐指数
1
解决办法
1812
查看次数

C#摆脱WebClient中的Connection头

我正在使用WebClient()使用C#.

我正在测试发送的标头,我注意到会自动添加以下标头.

Connection : Keep-Alive
Run Code Online (Sandbox Code Playgroud)

有什么办法可以删除吗?

c# webclient

14
推荐指数
2
解决办法
1万
查看次数