首页 关于我们新闻中心成功案例联系我们
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
QQ联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
电话联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
手机联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
QQ联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
电话联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广
手机联系乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广

乐投国际米兰俱乐部网络公司带你了解进程与线程区别、状态转换、通信方式

乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广发布时间:2020-07-25
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广发布者:乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部冷空气网络科技开发有限公司
乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广浏览次数:62
1.进程与线程概念
进程

乐投国际米兰俱乐部网络公司进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程

线程

线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,乐投国际米兰俱乐部网站制作线程也被称为轻量级进程。

2.进程和线程的区别
进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
进程有自己的独立地址空间,每启动一个进程,乐投国际米兰俱乐部SEO优化系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。
线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。
但是多进程程序更健壮,乐投国际米兰俱乐部微信开发多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间
总结:

线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。

乐投国际米兰俱乐部微信平台制作线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。

线程执行开销小,但不利于资源的管理和保护;而进程正相反。



3.进程与线程状态转换

进程有5种状态
创建状态(new) :进程正在被创建,尚未到就绪状态。
就绪状态(ready) :进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行。
运行状态(running) :进程正在处理器上上运行(单核CPU下任意时刻只有一个进程处于运行状态)。
阻塞状态(waiting) :又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲,该进程也不能运行。
结束状态(terminated) :进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行

线程有6种状态
乐投国际米兰俱乐部微信营销推广线程状态这一块有点复杂,会专门出一篇研究

初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

阻塞(BLOCKED):表示线程阻塞于锁。注意和进程的区别,进程是IO阻塞

等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

终止(TERMINATED):表示该线程已经执行完毕。



4.进程与线程的通信方式
进程间的通信方式
大概有 7 种常见的进程间的通信方式。

管道/匿名管道(Pipes) :用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。只存在于内存中的文件
有名管道(Names Pipes) : 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出(first in first out)。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
信号(Signal) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
消息队列(Message Queuing) :消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。
信号量(Semaphores) :信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争条件。
共享内存(Shared memory) :使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。
套接字(Sockets) : 此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
线程间的通信方式
线程间的通信有JMM内存模型控制,共享变量存储在主内存中,每个线程可以将其拷贝到自己的本地内存中,在本地内存中更新过的共享变量刷新会刷新到主内存,另一线程在从主内存中读取更新后的共享变量。

volatile与synchronize关键字

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性。

等待/通知机制:是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B 调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法返回,进而 执行后续操作。上述两个线程通过对象O来完成交互,而对象上的wait()和notify/notifyAll()的关系就如同开关信号一样,用来完成等待方和通知方之间的交互工作。

补充:

1)使用wait()、notify()和notifyAll()时需要先对调用对象加锁(在synchronized中调用)。
2)调用wait()方法后,线程状态由RUNNING变为WAITING,并将当前线程放置到对象的等待队列。
3)notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或 notifAll()的线程释放锁之后,等待线程才有机会从wait()返回。
4)notify()方法将等待队列中的一个等待线程从等待队列中移到同步队列中,而notifyAll() 方法则是将等待队列中所有的线程全部移到同步队列,被移动的线程状态由WAITING变为 BLOCKED。
5)从wait()方法返回的前提是获得了调用对象的锁。
从上述细节中可以看到,等待/通知机制依托于同步机制,其目的就是确保等待线程从 wait()方法返回时能够感知到通知线程对变量做出的修改。

管道输入/输出流:和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。

Thread.join():如果一个线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程终止之后才 从thread.join()返回。

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这 个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。




责任编辑:乐投国际米兰俱乐部网络公司,乐投国际米兰俱乐部网站制作,乐投国际米兰俱乐部SEO优化,乐投国际米兰俱乐部微信开发,乐投国际米兰俱乐部微信平台制作,乐投国际米兰俱乐部微信营销推广