多进程服务器和多线程服务器的实现

一、多进程服务器:
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倍。一个进程内的所有线程共享相同的内存空间、全局变量等信息(这种机制又带来了同步问题)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值