进程
什么是进程呢
进程就是一个正在执行的程序 ,是计算机操作系统进行资源分配和任务调度的基本单位.
进程是计算机中的程序关于某个数据集合上的一次运行活动,是系统分配资源的基本单位,是操作系统结构的基础.每个进程都有它自己的地址空间,包括文本区域 、数据区域和堆栈区域等部分。进程是一个动态的概念,相反程序是静态的指令集合。一个进程包含一个程序,程序是进程完成相应的功能的描述;但一个程序对应多个进程。
进程的状态
进程的状态包括就绪状态、阻塞状态和运行状态
进程的特点
并发性: 多个进程可以在同一时间内在不同处理器(CPU)上并行执行,提高了计算机操作系统的资源利用率 和并发性能.
==动态性:==进程的=是一个动态的概念,它会随着程序的执行而产生,随着程序的终止而消亡.
独立性: 每个进程都有自己的地址空间和系统资源,相互独立运行. 这样可以使得每个进程之间不会相互干扰 可以保证系统的稳定性.
线程
线程是操作系统能够进行运算调度的最小单位,它是操作系统能够识别的最小并发单位
线程是"轻量级"的进程 一个进程里可以有多个线程。 每个线程都有独立的栈空间,线程之间共享全局变量和静态变量。线程之间的通信比进程之间的通信更快,它们共享着同一块内存空间。
虽然线程可以提高我们程序的运行性能 ,但是线程过多会导致系统资源的浪费,甚至会导致死锁等问题 。 在使用线程的时候,我们应该根据实际情况合理安排线程的数量。
怎么创建一个线程
在Java中,我们可以通过一下方式 创建线程
1、继承Thread类并重写run()方法。
2、实现Runnable接口并重写run()方法。
第一种实现的代码如图:
package thread;
//直接继承Thread类创建线程
class MyThread extends Thread {@Overridepublic void run() {//这里要写分代码,就是该线程要完成的工作while (true) {System.out.println("hello thread");//让程序休眠1stry {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class Demo1 {public static void main(String[] args) {Thread t = new MyThread();t.start(); //启动线程 相当于创建了新的线程 如果直接调用run()方法就不算创建新的线程while (true) {System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
第二种如下图:
package thread;//利用实现Runnable接口来创建线程
class MyRunnable implements Runnable {@Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
public class Demo2 {public static void main(String[] args) {Thread t = new Thread(new MyRunnable());//启动线程t.start();while (true) {System.out.println("hello main");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}
进程和线程的区别
根本区别
进程是操作系统资源分配的基本单位,线程是CPU任务调度和执行的基本单位。
1、资源开销
进程需要更多的系统资源,因为每个进程都有自己的地址和空间。在对比之下,线程需要的资源较少,因为在同一进程中所有的线程都共享相同的地址空间和资源。
2、包含关系
一个进程可以包含多个线程,这些线程可以并行执行,从而可以提高程序的运行的效率。
3、内存分配
进程之间都是相互独立的,他们各有自己的地址空间和资源。同一进程中的所有线程共享相同的地址空间和资源。
4、影响关系
如果是一个进程崩溃,在保护的模式下不会对其他的进程产生影响。但是如果一个线程崩溃,可能会导致整个进程崩溃。
Java和C++在线程上的区别
1、跨平台性
Java是一个跨平台的语言,因此在它的线程模型上也是跨平台的。无论在哪个操作系统上,Java的线程行为都是一致的。而C++的线程模型则依赖具体的操作系统,不同的操作系统可能有不同的线程实现方式。
2、生命周期管理
在C++中,线程的生命周期是在主线程的运行期间内,也就是说,子线程的生命周期是在主线程的运行期间内结束的。 在Java中,子线程的生命周期可以延续到主线程之外,即主线程结束后,子线程还可以继续运行,除非它被标记成后台线程(守护线程)。
操作系统中为什么有进程
总的原因就是:进程的存在是为了实现多道程序并发执行和资源共享。
资源分配
进程是操作系统分配资源的基本单位。通过创建进程,操作系统可以为每个程序分配独立的资源,保证每个进程在运行时不会相互干扰 。
并发执行
进程允许多个程序同时运行,提高了系统的并发性和效率。可以充分利用CPU同时执行多个任务。
独立性和隔离性
每个进程都有自己独立的地址空间,相互隔离。这也就是说一个进程的崩溃不会影响其他进程的正常运行。
方便管理
操作系统可以通过进程对程序进行管理、调度 ;进程会提供一种统一的方式来组织操作系统中的程序执行。
好了 本篇内容到此就完了 ,后面还会讲讲多线程的一些其他知识 谢谢大家的浏览 !!!