进程与线程

927 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

进程

进程是操作系统进行资源分配的基本单位,比如你打开一个markdown就是一个进程,你往文档里写字是写到内存块中去的,等你ctrl+s保存的时候才会落到磁盘上。

我说这些你可能没有概念,我们打开任务管理器,这是我截图的谷歌进程:

image.png

你可以看到每个进程编号,就是pid,怎么这么多的进程呢?猜测与这个有关,我们关掉一些看看。

image.png

发现少了很多啊,看来谷歌浏览器是把每一个窗口都搞成了一个进程image.png

我们可以使用jps命令查看java进程,我们可以看到jps本身也被当成一个进程,它的进程编号是23880,说了这么多,相信大家对进程的概念是什么已经很清楚了。

image.png

进程是应用程序的启动实例,进程拥有代码和打开的文件资源、数据资源、独立的内存空间。

并发和并行

那进程是怎么执行的呢?多核时代其实是并发并行一同执行的,单核时代,只有并发,要么跑A进程、如果要跑B进程呢只能从A进程切换到B进程,但是多核时代,A进程和B进程可以同时在多核一起跑。

image.png

大家可以看到我的cpu核数和正在跑的进程有200多个,那操作系统是如何调度它们的呢?这就是操作系统内部的调度算法。比如可以根据优先级饥饿程度来决定如何调度。你的优先级低不要紧,几轮分配仍然分配不到,这个进程的饥饿程度会越来越高,即有更大概率优先调用,这种调度方式也就是抢占式调度

线程

线程呢,就是真正由CPU调度的单位,你打开一个idea,就是一个进程, 操作系统就给分配对应的内存块,但是你写代码,响应你动作的是线程,比如你吃鸡,你和你的队友同时射击对方,这份血条对你和你队友的游戏线程是共享的,但是同时射击,就要加锁保证线程安全,否则会发生什么呢?你和你队友打好几枪,这人还没死,就是典型的线程安全问题线程是操作系统进行调度的基本单位