1.定义程序员
2.做用编程
3.和进程的比较缓存
4.多线程(multithreading)的优势和缺陷多线程
5.调度(scheduling)性能
6.线程相关概念spa
定义操作系统
线程就是最小的可编程指令序列,是进程的子集。一个进程由一个或多个线程组成。线程
做用code
线程的做用就是要加速程序的执行,提升计算机的性能,知足多任务需求。好比word,你能够编辑,同时语法检查也正在进行,至少就是两个线程了。再好比播放电影,视频线程和音频线程同时执行,同时有两种可能,一种是在多核cpu下,每一个进程在不一样的cpu,是真正的同时执行;另外一种是单核cpu,这时能够采用time_sliced策略来实现同时的效果。视频
和进程的比较
|
process |
thread |
是否独立 |
独立 |
不独立,做为进程的子集存在 |
状态信息 |
更多 |
没进程多,一个进程的thread共享状态信息 |
是否有分隔的地址空间 |
有 |
没有 |
交互 |
process之间经过inter-process communicationmechanisms来交互 |
thread之间的交互经过他们已经共享了的data,code,files |
context switching速度 |
慢 |
快 |
多线程的优势和缺陷
多线程主要用于多任务操做系统中,多线程做为一个普遍使用的编程和执行模型容许多个线程存在于一个单独的进程里。这些线程共享进程的资源,可是可以单独的执行任务。
多线程应用程序有如下优势:
(1)负责任:单线程程序,若是主进程被要执行好久的任务阻塞,那整个应用程序就卡死了。若是是多线程就不存在这个问题,多线程的话,让子线程来执行,就算这个子线程被阻塞了,其余子线程和主线程还能够等待用户输入。
(2)更快的执行:当有多个CPU或多核CPU的状况下,多线程就会是真正的同时执行(每一个cpu执行一个thread),而不是time_sliced。
(3)更低的资源消耗:单进程多线程比多进程消耗的资源要少不少。好比,Apache就是利用多个listener threads来监听请求和多个server threads来处理请求。
(4)更好的系统利用:好比,一个文件系统用多线程能够达到更高的吞吐量和更低的延迟。由于在更快的中介(好比缓存)里的数据能够被一个线程获取,另一个线程能够去低速中介(好比硬盘)获取数据而不须要等待其余线程完成操做。
(5)简化共享和交互:线程之间的通讯主要经过它们已经共享的数据,代码和文件。
(6)平行化:经过处理让多个任务同时执行。
多线程的缺陷:
(1)同步的麻烦:由于一个进程的多个线程共享地址空间,程序员须要很是当心的来避免race conditions和其余非直观的行为。为了正确的操做数据,多个线程一般须要及时集合来确保按正确的顺序来处理数据。
这个时候可能须要用锁(更多的用信号量,其实信号量能够当作是多个锁的集合)来阻止同一数据被同时修改或读取当这个数据正在被修改。
(2)一个线程摧毁一个进程:一个线程的非法操做会摧毁整个进程。
调度
操做系统调度线程的两种方式:
(1)抢占式多任务是优先选择的方式。它容许操做系统来决定何时切换上下文来让更重要的线程来得到cpu资源。抢占式多任务的缺点:当操做系统切换上下文的时候不合适时,可能会致使很差的结果,好比lock convoy(多个优先级同样的线程重复竞争同一个锁) 和 priority inversion(优先级低的线程抢到了cpu资源)。为了不这个缺陷,因而就有了合做式多线程。
(2)合做式多线程。这个方式依赖于多线程本身来决定在什么点来放弃对cpu资源的控制。
显然,第一种调度方式,主导者是操做系统;第二种调度方式,主导者是多线程。
线程相关概念
green thread:被虚拟机调度的thread。
software thread:被操做系统调度的thread。