zoukankan      html  css  js  c++  java
  • 多进程和多线程

    多进程

    我们通常所得操作系统是多任务的OS。这个任务一般指的就是进程,比如:我们听音乐和写文档对于我们来说是同时执行的。那么是如何实现的呢?这主要是操作系统上的时间片,通常时间很短。每个时间片内将CPU分配给某一个任务,时间片结束,CPU将自动回收,再分配给另外任务。从外部看,所有任务是同时在执行。但是在CPU上,任务是按照串行依次运行(单核CPU)。如果是多核,多个进程任务可以并行。但是单个核上,多进程只能串行执行。

    多进程的优缺点

    优点:

    可以同时运行多个任务
    程序因IO堵塞时(例如键盘的输入),可以释放CPU,让CPU为其他程序服务
    当CPU有多个核时,可以为多个程序同时服务

    缺点:

    过于笨重,不好管理。
    进程之前切换代价过大。

    多线程

    概念:一个程序可以包括多个子任务,可串/并行,每个子任务可以称为一个线程。

    多线程在一个子任务发生IO堵塞时可以让cpu切换到另一个子任务,这样cpu知识在一个程序之间进行切换,所消耗的代价较小。例如:你让一个扫地阿姨帮你扫地,但是这个房间锁了,此时你只需要让她扫隔壁的房子就好。如果是进程的切换相当于你让她去扫另一栋楼,这时所消耗的时间就很多了。

    多线程和多进程对比

    – 线程共享数据 – 线程通讯更高效 – 线程更轻量级,更容易切换 – 多个线程更容易管理

    Java中多线程的创建




    public class MutiThread {
    
        public static void main(String[] args) {
           // new Thread1().start();//实例化之后可以直接start
            new Thread(new Thread2()).start();//必须借助中间类Thread进行start
            while(true){
                try {
                    Thread.sleep(1000);
                    System.out.println(Thread.currentThread().getName());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    /**
     * 实现多线程编程的方式1:继承Thread,重写run方法
     *
     */
    class Thread1 extends Thread{
        @Override
        //线程的代码段,当执行start()时,线程从此出开始执行
        public void run() {
            while(true){
                System.out.println(Thread.currentThread().getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 实现多线程编程的方式1:实现Runnable,实现run方法
     *
     */
    class Thread2 implements Runnable{
    
        @Override
        public void run() {
            while(true){
                System.out.println(Thread.currentThread().getName());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    Java中多线程的启动



    java多线程实现对比




    不一样的烟火
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/cstdio1/p/12236035.html
Copyright © 2011-2022 走看看