1. linux 多线程的基本概念
linux 是多用户、多任务的并发执行;所谓的并发是通过多进程、多线程来实现的;
1). 其中多进程有3种方式:
- 单机多实例(机器复用,一台机器启动多个进程,每个进程干自己的事情)
- 多进程(比如24core --> 启动24core) :nginx,通过(主进程(master)-->从进程(slave)的方式来调度和完成任务的分发,从而实现nginx 并发处理多个需求)
- 进程池:fork 多个,组装成一个进程池,然后通过主进程进行并发task 的调度
2). 其中多线程有2种方式:
- 多线程:启动一个进程(线程必须依附于进程来实现,通过启动进程来启动线程);也就是说一个进程至少有一个线程(每个人理解不用,这个句话也不一定正确,可以认为线程是最基本的执行单元,进程是最基本的程序单元【进程可以管理task、cpu、存储等】);一个进程可以启动多个线程来实现并发处理多个task;
- 线程池:启动、准备一个线程池(线程池的实现原理 + task 调度原理是?)
2. 多线程的代码实现(java 语言来学习)
1). 代码实现:
#实现一个线程类(一般用runable 来实现)
public class MyThread extends Thread{
private String name;
public MyThread(string name){
this.name = name;
}
#此线程的执行体都写在run方法里面,线程干的事情(可以在run里面写一个httpserver 服务器,并发处理一些http的请求)
public void run()
{
for(int i=0;i<100;i++)
{
Systen.out.printIn(name+":" +i);
}
super.run();
}
2). 启动线程
# 新建一个线程启动(干一件事情)
public class ThreadDemo01
{
public static void man(String[] args)
{
MyThread t1 = new MyThread("A");
MyThread t2 = new MyThread("B");
MyThread t3 = new MyThread("C");
# 启动线程(不能用run方法,要用start方法)
t1.start()
t2.start()
t3.start()
}
}
# 分析结果
a). 这里启动的三个线程干同样的事情,也可以干不同的事情,只需要实现三个线程类,把要干的逻辑写到各自的run方法即可
b). 这里启动了三个线程干同样的事情类似于实现了一个最简单的线程池,当然没有考虑各种容错、用户体验、api 逻辑等等,但线程池就应该是这么个意思
c). 三个线程会并发处理task,cpu 会在三个线程中进行切换[至于三个线程之间怎么切换:现在还不清楚,但是代码可以做一些控制: