(一)java并发编程--计算机中的进程和线程(多进程和多线程)

来源:互联网 发布:淘宝开店店名可以改吗 编辑:程序博客网 时间:2024/05/28 04:53

         java多线程是比较重要的部分,但是在了解java多线程之前,先了解一下进程和线程的关系。


         什么是进程(process)?


         我们打开windows任务管理器,可以看到计算机中的进程。如下图所示。


         在查看菜单中,选择列,可以选择查看进程的其他属性,我们添加上线程数,就可以看到这个进程有多少个线程在执行。



         可以看到我的计算机中的进程,大概了解到进程,进程具体定义。


         官方定义:
         A process or running process refers to a set of instructions currently being processed by the computer processor. For example, in Windows you can see each of the processes running by opening the Processes tab in Task Manager. Windows Processes are Windows Services and background programs you normally don't see running on the computer. For example, a process may be a printer program that runs in the background and monitors the ink and other printer settings while the computer is running.(在计算过程中,进程是正在执行的计算机程序的一个实例。它包含程序代码及其当前的活动。根据操作系统(OS)的不同,一个进程可能由执行实例的多个执行线程组成。)

         进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态概念,是一个活动实体。不只是程序代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。





         什么是线程(Thread)?



         从上图就能看出线程和进程的联系。


         从进程的角度来说。

         1、A  process starts with a single Thread.[Primary Thread] and later can create more Thread from any of its Threads.(一个进程是从一个线程创建开始的,一个主线程可以创建多个子线程)

         2、 A  Process has atleast one Thread.(一个进程至少有一个线程)

         3、 All Threads of a Process have access to its memory and System Resources.( 进程的所有线程都可以访问他的内存和系统资源)


         从线程的角度来说

         Thread is smallest unit of execution to which processer allocates time . It Consists -- (线程是程序执行的最小单元,自己处理器最小单元分配时间)

                  1、Program Counter (contains address of the next instruction to be executed)  (程序计数器)

                 2、 A stack (栈)

                  3、Set of registers(寄存器)

                  4、A unique id (唯一id)

         However ,a thread itself is not a program. It cannot run on its own,but runs within a program .(线程不是一个程序,不能自己独立运行,而是在一个程序中运行)

On a multiprocessor computer,the system can simultaneously execute as many threads as there are processors on the computer (在多处理器计算机中,系统能与多线程同步执行)


         线程执行过程,如下图所示

         开启一个进程的时候,进程会开启一个主线程,然后再把主线程分成各个子线程来执行,每个子线程返回执行结果。



         视频https://www.youtube.com/watch?v=exbKr6fnoUw讲的比较好。


         知乎上看到通俗的理解,打开qq,开了一个进程;打开迅雷,开了另外一个进程。在qq进程中,传输文字开了已给线程、传输语音开了另外一个线程、弹出对话框开了另外一个线程。所以在运行某个软件,相当于开了一个进程。在这个软件运行的过程里,多个“工作”支撑这qq运行,多个工作分别对应着多个线程。


         进程 和多进程


         单进程就是我们在打开word文档的时候不能再听网易云音乐的歌,单进程一次只能执行一个“任务”。而多进程,就是我们一边可以听你音乐,一边也可以写文档。如本篇中的一开始的资源管理器截图中,可以看到我的电脑同时进行着多个进程。而计算机是如何可以同时执行多个任务的?

          单cpu单核

         单核的cpu可不可以处理多进程?单核cpu也可以处理多进程的,操作系统可以让各个任务轮流进行,任务一执行0.001,任务二执行0.001,任务三执行0.001.....等,这样交替执行,单绝不是同一个时刻进行,但是我们用户看起来是多个任务在“同时”进行,任务cpu处理数据的速度十分快,让我们感觉所有的任务都在同时进行。

         单cpu多核

         例如我的笔记本是双核四进程,如下图所示。利用“超线程“,物理上是两核,但通过虚拟扩展扩展为四核,四核就可以同时运行四个进程了。处理多进程时,效率要高于单核cpu。

                  

                 

          多个单核cup

          每个cpu都有需要独立的电路支持,有自己的cache,而他们之间通过电路板上的总线通信。多进程的时候,共享数据在多个cache中存在,多个cache一致性也需要保证,硬件上也会占用更多的位置。多个CPU常见于分布式系统,用于普通消费级市场的不多,多用于cluster,云计算平台什么的。多核cpu的瓶颈在于IO,尤其是cpu之间的通信。多cpu适用于大计算量,对速度不太敏感的任务。


         线程和多线程

         如下图所示,单线程就是一个单独的线程来打字,而存储打字数据需要停止当前的操作,然后再存储数据,两个操作不能同时进行。






         而多线程是一个线程IO输入的时候,另一个线程来存储数据,效率增高。





         比较好的文章:

         https://liam0205.me/2017/01/17/layers-and-operation-system/

         

         总结:

                  大概对计算机进程,线程,以及cpu相关内容了解,先有大概的雏形,2  8 原理。下一篇主要说说java内存模型与线程。


原创粉丝点击