线程间有共享数据。如果没有共享数据,用模型 3b 就行。虽然我们应该把线程间的共享数据降到最低,但不代表没有;
共享的数据是可以修改的,而不是静态的常量表。如果数据不能修改,那么可以在进程间用 shared memory,模式 3 就能胜任;
提供非均质的服务。即,事件的响应有优先级差异,我们可以用专门的线程来处理优先级高的事件。防止优先级反转;
latency 和 throughput 同样重要,不是逻辑简单的 IO bound 或 CPU bound 程序;
利用异步操作。比如 logging。无论往磁盘写 log file,还是往 log server 发送消息都不应该阻塞 critical path;
能 scale up。一个好的多线程程序应该能享受增加 CPU 数目带来的好处,目前主流是 8 核,很快就会用到 16 核的机器了。
具有可预测的性能。随着负载增加,性能缓慢下降,超过某个临界点之后急速下降。线程数目一般不随负载变化。
多线程能有效地划分责任与功能,让每个线程的逻辑比较简单,任务单一,便于编码。而不是把所有逻辑都塞到一个 event loop 里,就像 Win32 SDK 程序那样。
是的。很多服务器端程序都是允许被多个应用程序访问的,例如门户网站可以被多个用户同时访问,因此服务器都是多线程的。
主线程用于监听套接字,有新的连接建立之后创建一个副线程,主线程继续监听。
多线程技术可以提高cpu利用率,尤其是多核cpu的机器,提高并发执行效率。这是建立在cpu执行有空余的情况下的,多线程也并非没有代价,首先线程作为操作系统的最小调度单位也是要占用内存空间的,其次线程调度及上下文切换也会消耗性能。一般线程数为cpu个数*2+1较好,线程太多会占用内存,频繁的线程上下文切换也会导致效率降低。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)