进程和线程

进程和线程的区别:

(1) 进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。

(2) 同一个进程中可以包括多个线程,并且线程共享整个进程的资源,一个进程至少包括一个线程。

(3) 进程结束后她拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。

(4) 线程是轻量级进程,它的创建和销毁所需要的时间比进程小很多。

(5) 线程中执行一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

(6) 线程有自己的私有属性TCB,线程id,寄存器等,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志。

进程间通信的方式

(1) 共享存储区通信

为了传输大量的数据,在内存中划出了一块共享存储区域,各个进程可通过对该共享区的读或写交换信息,实现通信。这种通信方式属于高级通信,需要通信的进程在通信前,先向系统中申请获得共享内存区中的一个分区,并将其附加到自己的地址空间中,以便对其中的数据进行正常读、写,读写完成或不再需要时,将其归还共享存储区。

(2) 管道通信

所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程)以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程)则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称管道通信。

(3) 消息队列

以格式化的消息(message)为单位,将通信的数据封装在消息中,并利用操作系统提供的一组通信命令(原语),在进程间进行消息传递,完成进程间的数据交换。

(4) 信号量

本身不具有数据交换的功能,是通过控制其他通信资源(文件、外部设备)来实现进程间通信,本身是一种外部资源的标识。在此过程中负责数据操作的互斥与同步功能。

(5) socket通信

比如TCP,其实是两台主机上的进程在通信,通过socket实现的。

线程间通信的方式

(1) 共享变量

多个线程共同一个全局变量,以此实现线程间通信。

(2) 管道

使用java.io.PipedInputStream和java.io.PipedOutputStream进行通信。

这种更像是消息传递机制,就是通过管道,将一个线程中的消息发送给另一个线程。

(3) wait/notify

通过调用wait和notify方法进行线程间通信,以实现通知线程的状态发生改变。

(4) 锁机制

使用synchronized和Lock锁实现线程间通信,当对一个对象或代码块加上锁以后,也就通知了想要进入此代码块的其他的线程要进入阻塞状态。

参考:https://blog.youkuaiyun.com/zhou753099943/article/details/51771220

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值