导航:首页 > 编程系统 > linux线程进程模拟

linux线程进程模拟

发布时间:2021-10-14 09:15:02

linux和Windows下的线程,进程编程是一样的吗

1、windows里的进程/线程是继承自OS/2的。在里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲,windows的多进程与Linux并无多大的区别,在windows里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,windows里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。
2、在windows下,使用CreateThread函数创建线程,与Linux下创建进程同,windows线程不是从创建处开始运行的,而是由CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,windows的进程/线程要比Linux复杂,在Linux要实现类似
windows的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在windows下就无法实现类似fork的功能了。所以现在windows下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。
3、对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,windows下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

㈡ 在linux中用一个进程创建3个线程,在三个线程分别打印各自的线程id

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <pthread.h>


#define THREAD_NUM 3

void * thread_handler(void *arg);


void main()

{

int i;

pthread_t tid[THREAD_NUM];

for(i = 0; i < THREAD_NUM; i++){

pthread_create(&tid[i], NULL, thread_handler, NULL);

}

for(i = 0; i < THREAD_NUM; i++){

pthread_join(tid[i],NULL);

}

}


void * thread_handler(void *arg)

{

printf("process id: %d thread id: %lu ", getpid(),pthread_self());

}


㈢ linux怎样在进程中创建线程

方法一:PS
在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进版程创建的所有线程权。
$ ps -T -p <pid>

“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。

方法二: Top
top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。
$ top -H

㈣ Linux中进程和线程的对比与区别

线程和进程是另一对有意义的概念,主要区别和联系如下:

㈤ Linux编程和进程、线程

给你举个例子:
比方电脑里你安装的qq,暴风,迅雷他们都可以单独独立运行,那么我们就可以说qq是一个进程,暴风也是一个进程,迅雷更是一个进程
而要说到什么是线程,线程是运行在进程里里的程序
举例qq(线程),我们能同时用qq软件进行聊天,听音乐,为什么呢,这就是线程的优点所在,单独运行但又不互相干扰,创建线程有两种方法,线程一定要复写run方法,用start启动线程

使用Thread创建线程:
public MyThread extends Thread{
public void run(){
for (int i=0; i<20; i++){
System.out.println(
“my Thread i value: ”+i);
}
使用Runnable创建线程:
public MyThread implements Runnable{
public void run(){
for (int i=0; i<20; i++){
System.out.println(
“my Thread i value: ”+i);
}

对于这两种方法,实现线程,但是一般情况下我们都用第二种
因为第一种是用继承的关系,而第二种为实现接口
但是相对于第一种,第二种我们还可以另外继承类,来扩展功能,所以编程序时比较趋向于用实现的方法写线程
给你一个完整的例子:
class MyThread implements Runnable{
private int ticket = 5 ; // 假设一共有5张票
public void run(){
for(int i=0;i<100;i++){
if(ticket>0){ // 还有票
System.out.println(Thread.currentThread().getName()+"卖票:ticket = " + ticket-- );
}
}
}
};
public class SyncDemo01{
public static void main(String args[]){
MyThread mt = new MyThread() ; // 定义线程对象
Thread t1 = new Thread(mt) ; // 定义Thread对象
Thread t2 = new Thread(mt) ; // 定义Thread对象
Thread t3 = new Thread(mt) ; // 定义Thread对象
t1.start() ;
t2.start() ;
t3.start() ;
}
};

这是一个三线程:
三个线程都start,所以他们可以同时运行,但是又由于电脑cpu只有一个,只能运行一个线程,那么这三个线程就会去抢,谁抢到谁就线运行,start表示开始运行run方法,导致三个线程共享5个车票,你会发现每次运行结果不一样,这就是抢的结果,如果把车票写在run方法里就不一样了
Thread-0卖票:ticket = 5
Thread-0卖票:ticket = 4
Thread-0卖票:ticket = 3
Thread-2卖票:ticket = 2
Thread-2卖票:ticket = 1
结果二:
Thread-0卖票:ticket = 5
Thread-0卖票:ticket = 4
Thread-0卖票:ticket = 3
Thread-1卖票:ticket = 2
Thread-0卖票:ticket = 1
反正很多答案,自己试。

㈥ linux执行java程序时线程和进程的问题

你这个特征数据采集应该是属于计算密集型的使用cpu。在cpu上,所谓的并发执行数版量是取决于你的cpu核数的,比权如,你的cpu是8核的,那么同一时刻最多只有8个线程在运行,其它的都会处理于等待状态。至于为什么会有23个线程在跑,有可能是你使用了第三方的框架,它们初始化了线程,java启动的时候也会有线程数比如垃圾回收的线程。

㈦ linux 怎么查看一个进程的所有线程

1、top -H
手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程版。
2、ps xH
手册中说:H Show threads as if they were processes
这样可以查权看所有存在的线程。
3、ps -mp <PID>
手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。
更多详尽的解释还可以man ps,man top。

㈧ LINUX里进程线程编程

你写两个程序, 第一个 helloworld.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
然后gcc helloworld.c -o helloworld

写第二个程序 exc_helloworld.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[], char **environ)
{
pid_t pid;
int stat_val;

pid = fork();

switch (pid)
{
case -1:
perror("Process Creation Failed\n");
exit(-1);
case 0: //子进程
execve("helloworld", argv, environ);
exit(0);
default:
break;
}
wait(&stat_val);
exit(0);
}
然后gcc exe_helloworld.c -o exe_hellworld
最后./exe_helloworld

㈨ linux中多进程程序和多线程程序的区别

IBM有个家伙做了个测试,发现切换线程context的时候,windows比快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。
如果是UNIX/linux环境,采用多线程没必要。
多线程比多进程性能高?误导!
应该说,多线程比多进程成本低,但性能更低。
在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。
多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。
多线程是平面交通系统,造价低,但红绿灯太多,老堵车。
我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。
高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

多线程的优点:
无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量等;
线程方式消耗的总资源比进程方式好;
多线程缺点:
每个线程与主程序共用地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU

多进程优点:
每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
多线程缺点:
逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;
最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……
方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

㈩ Linux系统上如何查看进程(线程)所运行的CPU

阅读全文

与linux线程进程模拟相关的资料

热点内容
word符号对齐 浏览:475
诺基亚900忘记锁屏密码 浏览:440
口口改密码咋改 浏览:727
微信删除apk文件 浏览:77
ifonebox查看微信聊天记录 浏览:966
深圳地铁wifi花生码 浏览:105
安卓app安装验证失败 浏览:787
同一个id的iphone短信 浏览:46
G5大数据 浏览:628
小米5更新安卓70系统 浏览:766
js鼠标触发事件 浏览:683
苹果6半屏功能 浏览:495
win10启动弹出 浏览:788
安卓7应用程序在哪 浏览:81
ftp绕过账号密码 浏览:196
网页倒计时特效代码 浏览:306
大数据保密制度 浏览:551
linuxsocket压力测试工具 浏览:971
计算机网络第六版试卷 浏览:941
手机钉盘上传文件 浏览:695