当前位置: 首页 > 后端技术 > PHP

多线程程序单核cpu和多核cpu如何工作的讨论

时间:2023-03-30 01:02:23 PHP

对于多线程程序,单核cpu和多核cpu如何工作的讨论代码对性能的影响将被忽略,或者没有足够的灵敏度来帮助你判断你的技术方案对系统性能的影响。改进的方法之一就是我们需要对底层系统的原理有更好的理解,这样我们心里就??有了杆秤,知道选择什么样的技术来实现代码,可能会带来什么样的问题.本文通过收集一些论坛讨论问题,帮助大家了解CPU如何处理多线程程序,对性能会有哪些影响和取舍,虽然内容中有一些基础,但这些基础往往是最容易被我们忽视。一、多线程在单核和多核CPU上的执行效率讨论a1:多线程其实是在单个CPU上是顺序执行的,但是系统可以帮你切换哪个执行,其实不是muchfaster(insteadslower)如果只有一个CPU,可以同时在两个CPU上执行……a2:对于在单核CPU上运行的多线程程序,只有一个线程可以同时运行,系统帮你切换线程。系统为每个线程分配时间片来执行。每个时间片约为10ms。看起来是同时运行,其实是每个线程运行一点,然后切换到其他线程继续运行。效率不好。切换线程会增加,但是会增加开销a3:#3楼说的对。因此,如果一般情况下没有必要,尤其是使用单核CPU时,不建议使用多线程。当使用单核CPU时,使用多线程时,通常会有线程需要处于等待状态。对于普通的进度条更新,那些容易控制的(例如:在循环中手动处理消息)简单控制,一般不使用线程,这样可以提高程序的性能。并避免不必要的线程同步问题。a4:试试双核三线程,但保证效率比双线程低!在算法相同的情况下,CPU占用率为100%的线程数最少时效率最高。对于CPU占用率高的操作,单核单线程、双核双线程、四核四线程最适合。但是为什么有时候线程数超过CPU核心数反而更快呢?原因是这个程序单线程的计算量不足以填满CPU的一个核心(比如有大量的IO操作,而且IO比较慢,是瓶颈)该程序)。a5:多线程的用处在于,在做一个耗时的操作时,需要等待结果返回。这时候使用多线程可以提高程序的并发度。如果一个任务不需要任何等待,可以顺序完成,那么使用多线程简直就是一种浪费。讨论源地址2.浅谈多核CPU、多线程与并行计算a1:CPU的发展趋势是核心数会不断增加。根据摩尔定律,由于单核性能提升存在严重瓶颈问题,普通台式机有望在2017年底和2018年初达到24核(或16核32线程)。我们如何面对这种突然增加的核心数量?编程也与时俱进。作者大胆预测,CPU核心之间的片上总线会以4)为一组连接,因为全连接太复杂,单条总线不够强大。而且应该是非对称多核处理器,可能混入几个DSP处理器或者流处理器。a2:线程是不是越多越好?什么时候需要使用多线程?线程越多越好。线程切换也需要开销。当你添加一个线程时,额外的开销小于线程可以消除的阻塞时间,这是物有所值的。从2.6内核开始,Linux将不同的线程分配给不同的内核进行处理。Windows从NT.4.0开始也支持此功能。什么时候应该使用多线程?这将在四种情况下进行讨论:多核CPU计算密集型任务。这时候尽量使用多线程来提高任务执行效率,比如加解密、数据压缩解压(视频、音频、普通数据),否则只有一个核可以满载,其他核都是闲置的。b.单核CPU——计算密集型任务。此时的任务已经消耗了100%的CPU资源,没有必要也不可能使用多线程来提高计算效率;相反,如果要做人机交互,最好使用多线程,避免用户无法与计算机进行交互。操作。C。单核CPU——IO密集型任务,使用多线程仍然是为了方便人机交互,d。多核CPU——IO密集型任务就不说了,道理和单核一样。程序员需要掌握的技能/技术(1)减少序列化代码,提高效率。这是无稽之谈。(2)单共享数据分发:将一份数据复制多份,让不同的线程可以同时访问。(3)负载均衡分为静态和动态。有关详细信息,请参阅相关文献。讨论源地址3.请问:CPU的多核与应用程序的多线程有什么关系?a1:多核是指系统可以同时运行多个线程。例如,双核可以同时执行两个线程。单个核心一次只能执行一个线程。a2:我试了一个多线程从192.168.0.1ping192.169.0.255的程序,发现单核机和多核机的性能大约相差两倍。a3:多核对用户来说是透明的,应该对程序员说。完全不用担心。单核的时候可以编程。除非您使用OpenMP进行编程,否则您将使用很多规则。另外,你上面的测试不准确,网络(主要是远程主机)会因为时间不同而有不同的响应速度,你应该在干净的本地环境下测试。不过多线程多核比单核好还是可以肯定的,总之我们不用担心程序在单核或多核上的并发问题。a4:多核是指CPU有多个核心,多线程是指程序有多个线程同时执行。多核也需要借助多线程才能发挥出优势。同样,多线程必须在多个内核上才能真正发挥优势。在这方面,它对程序员来说是不透明的。程序员可以控制程序/线程运行在哪个CPU(核心)上。用户还可以控制程序运行在哪些内核上。所以多核和多线程对用户和程序员来说是不透明的。程序员必须了解这些知识。为了让程序最大限度地发挥机器的性能。讨论源地址原文引用编辑:二月狮