Java并发编程:硬件上的并发中篇

102 阅读2分钟

src=http___i0.hdslb.com_bfs_article_807aa46619617caf3a3ea976300b575abae0676c.png&refer=http___i0.hdslb.webp 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

       在上文《Java并发编程:硬件上的并发上篇》,我们了解到了CPU的结构,以及计算机的内存结构。而讲到并发,肯定必不可少的要讲到进程与线程,本文将为大家讲解这部分内容。

进程与线程

src=http___blog.wingflare.com_wp-content_uploads_2020_01_d0c7af8556cd0c5d676273.png&refer=http___blog.wingflare.webp

       进程在日常开发中经常看到,比如操作系统上的各个Java进程、Redis进程等。它是操作系统进行资源分配的基本单元,我们每次启动进程的时候,操作系统都会为其分配独立的内存空间,也就是PCB。而进程,让操作系统的并发成为了可能,毕竟一个操作系统上面可以同时运行很多进程。
       而从上图,我们也可以知道,线程是存在与进程中的,是在进程中运行的,同时,它也是系统调度的基本单元。

进程与线程的区别

  • 在系统资源上,进程间相互独立,各自只能操作自己被分配到的资源。而同一进程中的线程之间资源是共享的。同时,进程内的线程,对其它进程是不可见的。
  • 在通信方面,进程间的通信很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制;而线程直接则可通过进程数据段(如全局变量)进行通信。
  • 进程的上下文切换代价比线程要大得多。
  • 在多线程操作系统中,进程不是一个可执行的实体。

父子进程

       在进程中,有一种概念叫做父子进程。其原理是从一个进程fork出另外一个内容完全一样的进程,这个进程就被称为子进程,而源进程则为父进程。子进程拥有自己独立的PCB,其初始内容是从父进程中复制出来的一个副本,子进程创建完成后,父子进程的PCB就完全隔离,各自维护。
       而在一些特殊情况下,父子进程会演变成一些特殊进程,具体如下:

  • 僵尸进程

子进程已结束,但是子进程的PCB未被主进程回收,这个子进程就被称为僵尸进程。

  • 孤儿进程

子进程还在,而父进程已经结束,这个子进程就被称为孤儿进程。

后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~