多线程和并发

进程与线程

进程与线程
  • 进程就是用来加载指令,管理内存,管理IO的,当一个程序运行,从磁盘加载这个程序到内存,就开启了一个进程
  • 一个进程能分为多个线程,一个线程就是一个指令流,将指令流中过的指令一条条以一定的顺序交给CPU执行
  • 线程是最小的调度单位,进程是资源分配的最小单位,windows中进程不是活动的,只是作为线程的容器
  • 对比
    • 进程基本都相互独立,而线程在进程内,是进程的子集
    • 进程拥有共享的资源,如内存空间,供其内部的线程共享
    • 进程间的通信较为哦复杂
      • 同一台计算机的进程通信称作IPC
      • 不同计算机之间的线程通信需要通过网络,遵守共同协议,如HTTP
    • 线程通信较为简单,共享进程内存的线程,多个内存可以访问一个共享变量
    • 线程更轻量,上下文切换成本比进程要低
  • CPU任务调度器:调度不同线程
并行与并发
  • 单核CPU下,串行执行,cpu把不同的时间片分给不同线程,轮流执行,叫做并发:concurrent
  • 多核CPU,不同的核心同时执行不同线程,叫做并行:parallel
  • 大部分情况下既有并发又有并行
异步调用
  • 同步:方法调用需要等待返回才能继续运行,叫做同步
  • 不用等待叫做异步
  • 多线程开发才能变成异步
  • 处理比较耗时的任务的时候用异步
  • tomcat的异步servlet,让用户线程处理耗时较长的操作,解放工作线程
  • 多线程可以利用多核CPU的优势,提高效率
  • linux是单核CPU
  • IO操作不占用CPU,但是一般拷贝文件使用的是阻塞IO,需要等待IO结束,没有充分利用线程
  • 需要非阻塞IO和异步IO提高线程利用率

java线程

  • 启动的时候默认有主线程在运行
TThread t = new Thread(){
   
     public void run(){
   
         //要执行的任务
     }
 };
 //起名
 t.setName("t1");
 //启动线程
 t.start();
Runnable task = new Runnable(){
   
            public void run(){
   
                //要执行的任务
            }
        };
        Thread t = new Thread(task);
        //起名
        t.setName("t1");
        //启动线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值