程序(Procedure)。是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。
进程(Process)。是操作系统中正在运行的一个程序,是系统进行资源分配和调度的基本单位。
进程通信是指不同进程之间进行数据交换和协调的过程。在操作系统中有多种进程通信方式,包括以下几种:
管道:管道是指一种单向通信机制,它可以在两个进程之间传输数据。管道分为有名管道和匿名管道,有名管道可以在不同进程之间共享,而匿名管道只能在父子进程之间共享。
共享内存:共享内存是指多个进程可以访问同一块物理内存的机制,这样就可以避免数据的复制和传输,提高了数据访问的效率。Java中可以使用共享内存实现进程间通信的方式是使用Memory Mapped Files。
信号量:信号量是一种计数器,它可以用来控制多个进程对共享资源的访问。当多个进程同时访问某个共享资源时,通过对信号量的操作来实现对资源的互斥访问。
消息队列:消息队列是一种基于消息的通信机制,它可以在进程之间传递数据。每个进程都有一个消息队列,它们之间通过发送和接收消息来进行通信。
套接字:套接字是一种网络通信机制,它可以在不同主机上的进程之间传递数据,实现进程之间的通信和协调。
RPC:RPC是一种远程过程调用协议,它可以实现在不同主机上的进程之间调用函数和传递参数,类似于本地调用函数一样方便。RPC的实现方式包括基于消息传递、基于共享内存和基于套接字等多种方式。
线程(Thread)。是进程中的一个实体,有单独的一条执行路径,是CPU分配和调度的基本单位。线程是不会独立存在的,一个进程中至少有一个线程。进程中的多个线程共享进程的资源,这些线程可以并行或并发地执行,从而提高程序的效率和响应速度。
线程通信是指多个线程之间相互协作完成任务的过程。在Java中,线程通信主要通过共享内存和对象的等待和通知机制来实现。
共享内存:在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。典型的共享内存通信方式,就是通过共享对象进行通信。例如线程A与线程B之间如果要通信的话,那么就必须经历下面两个步骤:
1.线程A把本地内存A更新过的共享变量刷新到主内存中去。
2.线程B到主内存中去读取线程A之前更新过的共享变量。
消息传递:在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。在Java中典型的消息传递方式,就是wait()和notify()或者BlockingQueue。
Java中的线程是程序执行的最小单元,它是由操作系统调度的独立执行的单位。Java中可以通过创建Thread类的实例来创建新的线程,也可以通过实现Runnable接口来创建线程。
用户线程(User Thread)。是指用户程序中创建的线程。比如在JVM启动时会调用main()函数,main()函数所在的线程就是一个用户线程,它们的执行不会影响程序的生命周期。当程序的所有用户线程都执行完毕时,程序才会退出。用户线程通常是通过调用Thread类的start()方法创建的,它们会一直运行直到程序退出或者调用stop()方法强制终止线程。
守护线程(Daemon Thread)。是指在程序运行过程中在后台提供服务的线程。比如垃圾回收线程、JIT线程都是守护线程,通常被用来执行一些与程序周期性无关的任务。当程序中只剩下守护线程时,程序就会退出。守护线程可以通过调用Thread类的setDaemon(true)方法设置为守护线程。
守护线程和用户线程之间有一个重要的区别,即守护线程不会阻止程序的退出。当程序退出时,守护线程会自动终止。因此,开发者需要根据具体的需求来选择使用用户线程还是守护线程。
需要注意的是,线程属性的设置需要在线程启动之前,否则会报IllegalThreadStateException异常。当程序中只剩下守护线程时,它们可能会突然终止,因此开发者需要避免在守护线程中执行一些需要保证完整性的操作,例如写文件、访问数据库等。
并行(Parallelism)。是指多个任务同时执行的过程,这些任务可以在多个处理器上并行执行,也可以在单个处理器上通过多个线程并行执行。比如在4核4线程的CPU架构中,同一时刻可以运行4个线程,那这4个线程就是并行执行的。并行的主要目的是提高程序的执行效率和性能,因为它可以让多个任务同时运行,从而减少等待时间和延迟。
并发(Concurrency)。是指多个任务交替执行的过程,这些任务可能在同一个处理器上通过时间片轮转机制交替执行,也可能在多个处理器上并行执行。比如在单核CPU架构中,OS通过CPU时间片机制提升CPU的并发能力;在多核CPU架构中,基于任务的并行执行能力以及CPU时间片切换的能力来提升CPU的并发能力。并发的主要目的是提高程序的响应能力和交互性,因为它可以让程序在等待某些操作完成的同时执行其他任务,从而让程序看起来更加快速和流畅。
需要注意的是,并行和并发并不是互相排斥的概念。在实际应用中,我们通常会同时使用并行和并发,以实现更高效、更灵活的程序设计。例如,在多核处理器上执行多个线程的时候,我们既可以使用并行来提高执行效率,也可以使用并发来提高响应能力和用户体验。
总的来说,并行是一个微观概念,描述CPU同时执行多个任务的能力。并发是一个宏观概念,它指的是CPU能够承载的压力大小。
多线程是指在同一个程序中,同时运行多个线程(线程是操作系统调度的最小单位),每个线程都可以执行不同的任务或指令。多线程的主要目的是提高程序的并发性和响应性,可以更充分地利用计算机的 CPU 和其他资源,从而提高程序的执行效率和用户体验。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.