多线程和单线程

转载 2018年04月16日 08:17:29
      单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。   
       而多线程,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于操作一次需要网络的返回信息   花的时间比较长,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。   而如果用多线程就可以在等待期间   加入其他的搜索,然后等待,这样可以提高效率。不过多线程和多进程共用一些资源时要考虑的问题好像也是一样的,对于一些公共资源或者公共变量的访问和修改时要注意特别的,需要一些锁定什么的,还有顺序问题的考虑。  
       多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程其实是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程是并发运行的。多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务的功能。多进程技术也可以实现这一点,但是创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出,对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。

多线程与单线程的区别

 单线程(Thread)与多线程的区别        首先了解一下cpu,随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架...
  • Douglax
  • Douglax
  • 2007-03-17 18:19:00
  • 29349

java单线程和多线程的区别

java单线程
  • CSDNones
  • CSDNones
  • 2015-08-16 22:15:56
  • 3448

单线程和多线程的区别?

通常多线程的应用不是为了提高运行效率,而是为了提高资源使用效率。比如你的应用程序需要访问网络,因为网络有延时,如果在界面线程访问,那么在网络访问期间界面将无法响应用户消息,这是就应该使用多线程。   ...
  • yangc20013
  • yangc20013
  • 2007-02-28 11:43:00
  • 5889

单线程和多线程的优缺点

单线程和多线程的优缺点 多线程处理的优点 同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。如果完成同步任务所用的时间比预...
  • Chengweilin2014
  • Chengweilin2014
  • 2016-10-12 11:44:27
  • 3083

单线程与多线程的区别

什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每...
  • u012134199
  • u012134199
  • 2015-05-31 18:19:29
  • 11626

浅谈C#中的单线程与多线程问题

1、单线程与多线程的区别,以及多线程的好处 单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到。 多线程,举个例子也就是说程序可以同时执行2...
  • gengyudan
  • gengyudan
  • 2013-06-19 19:34:48
  • 4715

单线程同步;多线程异步理解

线程 和 异步是两个不同的概念. 首先说线程, 线程是CUP顺序执行指令的一个调度单位. 一个线程内的指令将会被顺序执行,Ps.跳转指令也是按照时序执行的. 多线程,是指同一时刻存在多个调度单位. ...
  • abby_x
  • abby_x
  • 2013-03-23 15:58:07
  • 493

python 单线程与多线程爬虫

帮别人写爬虫,先是单线程,太慢,改了多线程 1.单线程 import urllib import urllib.request import requests import xlwt import...
  • zyxyzz
  • zyxyzz
  • 2017-10-22 15:09:15
  • 263

Java单线程和多线程详解

单线程 package com; public class SingletonThread { public static void main(String[] args) { // TO...
  • moxiaoya1314
  • moxiaoya1314
  • 2016-07-31 13:06:31
  • 3405

论多线程和单线程环境的类实例:

论多线程和单线程环境的类实例: 在多线程环境下,共享使用一个实例,如果实例是有状态的,并且线程要修改这个实例的状态,就要考虑线程安全问题,做好同步,如果需要 局部同步就局部同步,如果全局同步(比如...
  • KuaiLeShiFu
  • KuaiLeShiFu
  • 2016-12-15 18:25:00
  • 444
收藏助手
不良信息举报
您举报文章:多线程和单线程
举报原因:
原因补充:

(最多只允许输入30个字)