1、个人理解:其实进程线程是书本概念化了,在一个单核系统里,只有一个任务在执行,可以叫做进程或者线程,比如刷新窗口和后台数据处理,也可以人为的创建多线程,多进程。只不过为了概念化,我们把比较大的程序叫进程,进程下面又分为线程,其实都是一个程序执行过程中,比如分配给程序的进程1秒时间执行,这1秒又分配给几个线程来依次执行。这个操作系统是时间轮片的,而没有基于优先级。
多线程会共享一个进程的运行内存里面开辟的空间,比如全局变量,而在多线程编程中就会创建执行同一段代码以实现多线程并发的操作,这个时候共享的全局变量值的大小是未知的。同样因为线程划分的内存单元小,因此在单核的情况下是可以某种程度上看上去是在并发的执行。
一个程序至少有一个进程,一个进程至少有一个线程。
线程的划分尺度小于进程,使得多线程程序的并发性高。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存。
每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。
线程不能够独立执行必须依赖于应用程序。
要求同时进行又要共享某些变量的并发操作时,只能用线程,而不能用进程。
2、例子:
有时候,你打开一个程序,稍等一会,这个程序运行了,但是,它的主界面窗口变灰了,标题栏上写了“失去响应”这样的字样。
这个时候,这个程序到底发生了什么呢?
这个程序由很多线程组成,负责后台处理数据的线程在不停的使用操作系统分配给这个应用程序的处理器时间,而负责 GUI 的线程得不到处理器时间,从而导致窗口变灰”失去响应“。稍等一会后,这个程序的窗口又恢复了,”失去响应”字样消失了,我又能正常操作这个应用程序了。这个时候,因为负责 GUI 的线程得到了处理器时间,它才能够响应用户对它的操作。
进程间通信的方式(频):
管道,信号量,消息队列,共享内存,套接字,邮箱,互斥量
3、基本概念
进程就是正在执行的程序
线程是:
(1)轻量级的进程;
(2)进程有独立的地址空间,线程没有;
(3)线程不能独立存在,它是由进程创建,入fork或thread
(4)相对讲,线程耗费的CPU,和内存小于进程。
在Linux系统中,每个进程都分配一个ID号;
每个进程都会对应一个父进程,而这个父进程可以复制多个子进程,例如WWW的服务器;
每个进程可能以两种方式存在的,前台和后台,所谓前台进程就是用户目前的屏幕可以进行的操作。后台进程实际在操作,但屏幕上无法看到后台运行的进程;
一般系统的服务都是以后台进程的方式存在的,而且都会常驻在系统中,直到关机才结束。