多进程服务器和多线程服务器的实现
来源:互联网 发布:adobe软件都是干嘛的 编辑:程序博客网 时间:2024/06/16 00:26
一、多进程服务器:
1.多进程服务器实现代码:
#include <stdlib.h>#include <stdio.h>#include <signal.h>#define P_NUMBER 255 //并发进程数量#define COUNT 5 //每次进程打印字符串数#define TEST_LOGFILE "logFile.log"FILE *logFile=NULL;char *s="hello linux\0";int main(){ int i=0,j=0; logFile=fopen(TEST_LOGFILE,"a+");//打开日志文件 for(i=0;i<P_NUMBER;i++) { if(fork()==0)//创建子进程,if(fork()==0){}这段代码是子进程运行区间 { for(j=0;j<COUNT;j++) { printf("[%d]%s\n",j,s);//向控制台输出 /*当你频繁读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。可能导致测试结果不准,所以在此注释*/ //fprintf(logFile,"[%d]%s\n",j,s);//向日志文件输出, } exit(0);//子进程结束 } } for(i=0;i<P_NUMBER;i++)//回收子进程 { wait(0); } printf("Okay\n"); return 0;}
2、运行结果:
二、多线程服务器:
1.多线程服务器代码实现:
#include <pthread.h>#include <unistd.h>#include <stdlib.h>#include <stdio.h>#define P_NUMBER 255//并发线程数量#define COUNT 5 //每线程打印字符串数#define TEST_LOG "logFile.log"FILE *logFile=NULL;char *s="hello linux\0";print_hello_linux()//线程执行的函数{ int i=0; for(i=0;i<COUNT;i++) { printf("[%d]%s\n",i,s);//想控制台输出 //当你频繁读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。 //可能导致测试结果不准,所以在此注释 } pthread_exit(0);//线程结束}int main(){ int i=0; pthread_t pid[P_NUMBER];//线程数组 logFile=fopen(TEST_LOG,"a+");//打开日志文件 for(i=0;i<P_NUMBER;i++) pthread_create(&pid[i],NULL,(void *)print_hello_linux,NULL);//创建线程 for(i=0;i<P_NUMBER;i++) pthread_join(pid[i],NULL);//回收线程 printf("Okay\n"); return 0;}
2、运行结果:
编译时如下:
因为是线程必须加上-lpthread
故“gcc -lpthread -o server server.c -g
多进程方式使用fork生成子进程存在一些问题。
首先,fork占用大量的资源,内存映像要从父进程拷贝到子进程,所有描述符要在子进程中复制;
其次,fork子进程后,需要用进程间通信在父进程和子进程间传递信息,从子进程返回信息给父进程需要做较多的工作。
多线程有助于解决以上两个问题:
1、线程是进程内的独立执行实体和调度单元,又称为“轻量级进程”;
2.创建线程比进程快10~100倍。一个进程内的所有线程共享相同的内存空间、全局变量等信息(这种机制又带来了同步问题)。
阅读全文
1 0
- 多进程服务器和多线程服务器的实现
- TCP server的实现,和多线程,多进程服务器
- 实现多进程多线程服务器
- C语言实现多线程和多进程服务器
- 多进程、多线程服务器
- 用gdb调试多进程和多线程的服务器程序
- 基于TCP的多进程和多线程服务器
- 【网络】实现简单的TCP、UDP服务器、TCP多进程/多线程服务器
- 多线程、多进程TCP服务器、进程池和线程池
- 多进程、多线程服务器程序
- 多进程多线程TCP服务器
- socket--多进程,多线程服务器
- 多进程多线程服务器编写
- 单进程多线程并发服务器实现
- 怎么理解并发多进程服务和多线程服务器
- 怎么理解并发多进程服务和多线程服务器
- 简单多进程和多线程版并发服务器
- 高性能服务器编程--多进程和多线程
- iOS 判断 电子邮箱Email 是否合法
- Flink学习笔记 --- Flink本地(Loacl模式)安装
- windows下dos命令上传文件-非ftp(linux)
- 杂记
- 使用cookie实现跨域系统单点登录
- 多进程服务器和多线程服务器的实现
- 被遗忘的NSException
- iOS面试资料2
- SpringMVC自定义拦截器——实现自动装配Action字段
- 内存超限 和 超时问题(Maximum execution time)解决
- linux shell中的 eval , ` ` , $() 命令
- 欢迎使用CSDN-markdown编辑器
- JAVA类代码块执行顺序、以及继承父类的执行顺序
- Android 签名后安装失败(-103)