课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件编程开发行业是目前大多数人都希望加入的一个行业,而参加达内培训就是一个很好的转行方法,下面我们就通过案例分析来简单了解一下,软件开发基础知识分享。
1、什么是线程?
在传统操作系统中,每个进程中只存在一个地址空间和一个控制流(thread)。
然后,有些情况下,需要在相同地址空间中有多个控制流并行的运行,就像他们是单独的进程一样(只是他们共享相同的地址空间)。
这些控制流通常被称为线程(thread),有时也称为轻量级进程(lightweightprocess)。
尽管线程必须在进程中执行,但是线程和进程是可以分别对待处理的两个概念。进程用来集合资源,而线程是CPU调度的实体。
线程给进程模型增加的是,允许在同一个进程环境中有多个执行流,这些执行流在很大程度上相对独立。
也即是说,在进程中,程序执行的小单位(执行流)是线程,可以把线程看作是进程里的一条执行流。
一个进程里可以有一条或多条线程。
2、为什么会有多线程?
在一个应用程序执行过程中,应用程序里可能会有多种事件执行。
而有些事件执行一段时间后可能会被阻塞。如果把应用程序执行事件分解成多个并行运行的线程,即可以让程序设计变得简单,如果有阻塞的,
可以把这部分让出行换其他线程执行。
还有一个原因是:
线程比进程更轻量级。所以线程比进程更加容易创建,销毁。
三个跟一个有点关系,是关于性能的,若多线程都是CPU密集型的,那么不能获取性能上增强。如果有大量计算和大量I/O处理,那么
多线程就可以获取性能上的优势,因为允许多线程重叠执行。
多线程的缺点:
对于多线程来说,进程中的资源是共享的,所以会产生资源竞争。
当进程中的一个线程崩溃了,会导致这个进程里的其他线程也崩溃。所以有时多进程程序更好,一个进程崩溃不会导致其他进程也崩溃。
3、进程与线程区别
从上面进程和线程介绍知道,线程是程序执行流的小单位,进程是操作系统分配资源的单位。
进程与进程之间关系:
进程与进程之间是相互独立的。
线程与进程关系:
线程是进程里的执行流,进程里的线程可以是一个,也可以是多个。
所有线程共享进程里一些资源,比如代码,数据,地址空间,信号处理,打开文件,全局变量等。
同时,线程也有自己的寄存器,程序计数器,堆栈,线程状态等
4、协程
协程是建立在线程之上,一般是语言级别的”多线程“模型,比线程更加的轻量级。有的叫它微线程。它是完全运行在用户态里。
协程是在线程之上在进行抽象,它需要线程来承载运行。一个线程可以有多个协程。
比如Go语言的goroutine,它用一个关键字go就可以运行一个协程程序。
在Go语言里面,协程是由Go提供的runtime来控制和调度。
协程的优点:
协程栈很小,只有几KB,而线程栈是1M,对比起来,创建大量协程需要的内存更少。
协程的调度是语言提供的runtime来调度,是在用户空间直接调度,不需要在内核空间和用户空间来回切换,浪费效率。
能更好的利用cpu的多核,提高程序执行性能。
避免阻塞,如果协程所在的线程发生了阻塞,那么协程调度器可以把运行在阻塞线程上的协程,调度到其它没有发生阻塞的线程上,继续运行。
五:协程与线程区别
协程是运行在线程之上,一个线程可以有多个协程。就像一个进程里可以有多个线程一样。
协程能更好的控制利用多核机制。比如Go协程可以控制运行在多少个CPU的核上。
协程是在用户空间完成调度,由语言提供的runtime进行调度完全用户态。线程由内核调度。
协程使用内存更小。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。