什么是进程:
1、进程就是执行中的一段程序,也就是说,一旦程序被加载到了内存并准备执行时,它就是一个进程;2、进程具有文本、数据、堆栈片段以及它自己的资源。资源可以是文件,对象句柄,设备,信号量,互斥量,管道等等;
3、操作系统管理进程以及它的资源,有大量信息与进程有关,这些信息保存在一个称作进程控制块的数据结构中;操作系统就是用这个进程控制块来管理进程以及它的资源;
4、当创建了一个进程的时候,就分配了一个进程空间。文本片段通过一个可执行映像初始化;
什么是线程:
1、线程是一种轻量级进程。与进程相比,线程给操作系统带来的创建、维护和管理负担要轻,因为与线程相关的信息非常少;2、线程没有地址空间,线程包含在进程的地址空间中;线程文本包含在它的进程的文本片段中;进程拥有的资源线程都可以使用;
3、一个进程里面可以有多个线程,这些线程共享进程的资源;
两者的区别:
1、相同点:
第一:都有上下文内容;第二:都可以发生上下文切换(发生三种状态的相互转换,运行,阻塞,就绪);
第三:都可以实现并发执行;
2、不同点:
第一:线程是一种轻量级进程;第二:线程没有自己的线程空间,线程包含在进程的进程空间中;
第三:一个进程可以包含一个或多个线程;
线程安全:
多个线程共享进程的资源,当多个线程都执行一段代码,但是这一段代码会用到一个全局变量并会修改这个全局变量,所以这个时候会出现问题;多个线程并发执行,当第一个线程读取这个值的时候是3,当正在处理的时候另外一个线程将这个变量的值改为了9,这个时候就可能会出现问题。
这是多个线程并发执行出现的竞争问题,所以需要用到线程的同步方法;线程同步方法,一般有互斥量,互斥量与条件变量配合使用(生产者与消费者模型),信号量,读写锁;
参考:http://blog.csdn.net/linux_ever/article/details/50354377
上面的这些东西都是一些比较小的知识点,想彻底搞懂需要看很多介绍,下面是一些参考资料
具体参考资料:
1、现代操作系统(内容讲的很细很详细挺好,适合进程线程概念入门)2、C++面向对象多线程编程(第2章,第3章)
3、C++多核高级编程(第5章,第6章)
第2,3这两本书挺好的,尤其是C++多核高级编程(目前只看了前7章,感觉很好)。
最下面这本操作系统的书也挺好的,非常适合操作系统概念入门,我看的第一本操作系统的书,讲的非常好。
重点大学计算机专业系列教材:操作系统 ----谌卫军,王浩娟 著