什么是并发

为什么要学习并发:

知道了并发可以充分利用CPU资源,使我们编写的程序性能更高。

程序

​ 程序 是数据和指令的有序集合,本身无意义,就是一个静态的概念。
​ 进程 是执行程序的一个运行过程,操作系统的资源分配,是动态概念。
​ 线程 是程序执行过程中的确切操作的执行对象。

线程

启动一个程序就会启动一个进程,一个进程内包含1个到多个线程 main线程是主线程,程序的入口,用于执行整个程序。一个线程内包含多个指令(线程是cpu的调度和执行单位),

cpu是接受线程,处理指令的地方,一个cpu一次只能处理一个线程任务,线程需要获取cpu时间片才能被cpu处理,时间片很短

CPU、进程与线程的关系图(基础关系)

 

P: 进程 

UT: 线程

并发的概念:

并发: 指单个cpu同时处理多个线程任务,cpu在反复切换任务线程,实际还是串行化的;

1.并发连接数是指服务器当前时刻一共维持了多少TCP连接,而这些连接上是否有数据通讯并不关心,例如一台消息推送服务器上可能维持了百万的设备连接,由于连接上很少有数据通讯,所以这台服务器上负载可能几乎为0,只要内存足够,还可以继续接受连接。

2.并发请求数一般用QPS(服务器每秒处理多少请求)来衡量,而当前时刻服务器上有多少个tcp连接并不关心。例如一台服务器只有10个客户端连接,每个客户端连接上每秒有1W个请求,那么要求服务端需要至少能支撑10*1W=10W每秒的吞吐量(QPS)。假设10W吞吐量每秒是这台服务器的极限,如果每个客户端每秒发送1个请求给服务端,那么这台服务器能够支撑10W个客户端。

并发条件

第一,是否有共享变量
第二,是否多线程环境
第三,是否多个线程更新共享变量

并发的特点:

1.速度(更快的执行):

通常,并发都是提高运行在单处理器上的程序性能;(事实上,如果没有阻塞。那么在单处理器上的使用并发不会提升速度。)

2.设计可管理(改进代码的设计):

java线程机制都是抢占式的,即调度机制会周期性的中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动他的任务。

协作多线程:每个任务都会自动放弃控制,由程序员有意识的插入让步语句;

协作的优势:能够合理的分配cpu资源,达到想要的效果。

并发示意图:

 

箭头代表线程在执行任务

虚线表示线程交替执行停留片段

基本的线程机制:

通过使用多线程机制将程序分为多个分离的、独立运行的任务,每个任务(线程)都会“认为”自己一直占用CPU,但事实上CPU时间是划分成片段分配给了所有任务。

定义线程任务

线程可以驱动任务,因此,你需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只需要实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。

例如:

public class Pl implements Runnable {


public void run() {
System.out.println("早上,起床");
System.out.println("上午,下午,工作,学习");
System.out.println("晚上,睡觉");
}

}
开启线程任务

package com.tanjie.concurrent;

public class MainClass1{
public static void main(String[] args) {
Thread t = new Thread(new Pl());
t.start();
System.out.println("主线程执行自己的命令....");
}
}

posted @ 2022-08-04 23:14  zss16630975217  阅读(1160)  评论(0编辑  收藏  举报