多线程不能不知道的之单线程和多线程的比较

来源:互联网 发布:网络关系成瘾 编辑:程序博客网 时间:2024/05/16 07:40

      早期的计算硬件十分复杂,但是操作系统执行的功能确十分的简单。那个时候的操作系统在任一时间点只能执行一个任务,也就是同一时间只能执行一个程序。多个任务的执行必须得轮流执行,在系统里面进行排队等候。

栗子君有话说

      例子1,你正在通过你的web浏览器查看一些精彩的文章,你需要把好的文章给下载下来,可能有些非常精彩的文章你需要收藏起来,你就用你的打印机打印这些在线的文章。在这里,浏览器一边下载HTML格式的文章,一边还要打印文章。这就是一个程序同时执行多个任务,每个任务分配一个线程来完成。

      例子2,大家是否有在食堂吃饭的经历,尤其是学校里面的食堂。学生有访问高峰,这就需要卖饭的大妈,身手矫健,要记下学生点的饭,之后一边做饭,一边装饭。如果生意实在太好,可以多雇人手,一起帮着卖饭。

      一个食堂大妈就是进程,记菜单,做饭,装饭这些动作就是进程中线程。如果想要快速完成这些动作,食堂大妈就要在记菜单,做饭,装饭之间不停的切换,这个就是多线程。如果增加人手这个就相当于计算机增加cpu内核,他们都可以独立执行线程,这也是多线程。


线程创建原理

      操作系统创建了进程后,会创建一个线程执行进程中的代码,这也就是主线程。主线程在运行过程中,可能会创建其他线程(辅助线程),这些创建的线程又可以创建其他线程,这样就使得多个线程在同一个进程中执行。每个线程都独立运行,共享进程提供的各种资源,如代码、数据、虚拟地址空间等,每个线程可以执行进程中的不同代码,进程中的同一段代码也可以由多个线程执行(可以同时被多个线程访问的代码、数据等资源就是临界资源)。

 

      线程就是程序中的一个执行路径, 它在进程上下文中执行,有一定的生命周期。

 

      线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

单线程和多线程的比较

      多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题

 

      单线程和多线程执行效率,有时往往是因为线程中断,多线程可以执行其他的无关的线程,提高cpu的利用率。整体来看的话,是多线程对资源的利用率高,所有才会觉得多线程执行时间比单线程短


多线程的缺点

      上面说了很多基本上都是多线程带来的优点,这里说点它的缺点。如果一个程序有很多的线程,那么其他程序的线程必然只能占用更少的CPU时间;而且大量的CPU时间是用于线程调度的;操作系统也需要足够的内存空间来维护每个线程的上下文信息;因此,大量的线程会降低系统的运行效率。


关于多线程这一块还得再写个demo,后面会分享,欢迎大家阅读!

2 0
原创粉丝点击