Ray*_*yes 21
没有硬性和快速的答案,但大多数时候,对于工作流程/计算是连续的系统,您将看不到任何优势.但是,如果问题可以分解为可以并行运行的任务(或者问题本身是大规模并行的[因为某些数学或分析问题]),您可以看到大的改进.
如果您的目标硬件是单处理器/核心,那么您不太可能看到多线程解决方案有任何改进(因为无论如何一次只运行一个线程!)
编写多线程代码通常比较困难,因为您可能需要花时间创建线程管理逻辑.
一些例子
GUI是一个有趣的领域,因为如果工作者算法通过给它时间保持主GUI"活着",可以维持界面的"响应性",在Windows API术语中(在.NET之前等),这可能是通过原始循环实现,无需线程:
MSG msg;
while(GetMessage(&msg, hwnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
// do some stuff here and then release, the loop will come back
// almost immediately (unless the user has quit)
}
Run Code Online (Sandbox Code Playgroud)
Min*_*ark 15
服务器通常是多线程的(Web服务器,radius服务器,电子邮件服务器,任何服务器):您通常希望能够同时处理多个请求.如果您不想在开始处理新请求之前等待请求结束,那么您主要有两个选择:
启动进程通常比启动线程(或在线程池中选择一个)更耗费资源,因此服务器通常是多线程的.而且,线程可以直接通信,因为它们共享相同的内存空间.
多线程的问题在于它们通常比多个进程更难编码.
实际上有多种原因可以应用多线程:
具体例子:
这些天,答案应该是可以的任何应用程序.
单个线程的执行速度几年前达到了顶峰 - 处理器通过添加内核而不是通过提高时钟速度而变得更快.已经有一些架构改进可以更好地利用可用的时钟周期,但实际上,未来正在利用线程.
有很多研究正在寻找并行化我们传统上不会想到并行化的活动的方法.甚至像在字符串中查找子字符串这样简单的东西也可以并行化.
归档时间: |
|
查看次数: |
36290 次 |
最近记录: |