博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统基础知识之————单线程(Thread)与多线程的区别
阅读量:7107 次
发布时间:2019-06-28

本文共 1440 字,大约阅读时间需要 4 分钟。

单线程(Thread)与多线程的区别

(一)首先了解一下cpu:

       随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐渐成为瓶颈,最高为4G,事实上目前3.6G主频的CPU已经接近顶峰。

       多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用 CPU 而只和 I/O , OEM BIOS 等资源打交道时,让需要占用 CPU 资源的其它线程有机会获得CPU资源。

       每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。

       这个线程其实是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。

       当程序运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程是并发运行的。多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务的功能。

       多进程技术也可以实现这一点,但是创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出,对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是同时有好多线程在执行。但是线程切换是有代价的,如果出现时间较长,就出现程序假死状态,出现程序无响应等症状。

      因此如果采用多进程,那么就需要将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。

      但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需要的时间,要比一个线程的进程执行两次任务所需要的时间要多一些。

      即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。

     上述结果只是针对单 CPU,如果对于多 CPU 或者 CPU 采用超线程技术的话,采用多线程技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。

     以上文档引用“douglax”的观点:http://blog.csdn.net/douglax/article/details/1532258

下面这个简单的应用实例是一个多线程过程

private void button1_Click(object sender,Eventargs e){Thread t=new Thread(new ThreadStart(ThreadProc));    t.Start();   Thread.Sleep(0);   t.Join();}public static void ThreadProc(){          string threa="在这里获取UDP传递的流,其类型为byte[]";         Thread.Sleep(0);}

1)程序的窗口运行在主线程上;

2) Thread t=new Thread(new ThreadStart(ThreadProc)) 又启动了另外一个线程

 

你可能感兴趣的文章
Linux与JVM的内存关系分析
查看>>
详解SpringMVC中Controller的方法中参数的工作原理——基于maven
查看>>
flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)
查看>>
接口测试的工具
查看>>
error log
查看>>
innerHTML引起IE的内存泄漏
查看>>
转化率不好?告诉你转化飙秘诀
查看>>
Class.forName()用法详解
查看>>
Linux内核实践之工作队列【转】
查看>>
一个简单得不能再简单的“ORM”了
查看>>
交叉验证 Cross-validation
查看>>
压力测试就是一种破坏性的性能测试
查看>>
开发环境、生产环境、测试环境的基本理解和区别(转)
查看>>
angularjs学习曲线
查看>>
关于Cocos2d-x中对其他某个类的某个属性的获得
查看>>
多进程多线程优先级理解--优先级反转【转】
查看>>
BZOJ 3343: 教主的魔法 分块
查看>>
秋招笔试碰到的疑难题目1
查看>>
Zookeeper WINDOWS 安装配置
查看>>
Android应用截图嵌入到真实设备
查看>>