并发程序设计

ComputeTask.h:
void executeComputeTask();

ComputeTask.c:
#include "ComputeTask.h"
#include <stdio.h>
#include <stdint.h>

#define LOOP_SIZE (1024*1024*1024)

void executeComputeTask()
{
	size_t idx=0;
	size_t loopSize=LOOP_SIZE;
	
	for(idx=0;idx<loopSize;++idx)
	{
		//sum
	}
}

IOTask.h:
void executeIOTask();

IOTask.c:
#include "IOTask.h"
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE (1024*1024*1024)

const char fileName[]="IOFile";
void executeIOTask()
{
	char* fileBuf=(char*)malloc(BUFFER_SIZE);
	int fileFd=open(fileName,O_RDWR|O_CREAT,0644);
	if(-1==fileFd)
	{
		perror("Open File Error");
	}
	memset(fileBuf,97,BUFFER_SIZE);
	size_t writeSize = write(fileFd,fileBuf,BUFFER_SIZE);
	printf("write:%lu bytes to file:%s\n",writeSize,fileName);
	free(fileBuf);
	close(fileFd);
}

mainProg.c:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <unistd.h>

#include "ComputeTask.h"
#include "IOTask.h"

typedef enum OP{

	COMPUTE_TASK=1,
	IO_TASK
}OP_t;

typedef struct task{
	struct task *next;
	OP_t taskType;
}task_t;

int main(int argc, char *argv[])
{
	double computeTaskTimeElapse=0.0;
	double IOTaskTimeElapse=0.0;
	double totalTimeElapse=0.0;

	struct timeval computeTaskStartTime, computeTaskEndTime,IOTaskStartTime, IOTaskEndTime;
	
	pid_t fpid;
	task_t computeTask, ioTask;
	task_t* curTask = &computeTask;

	computeTask.taskType = COMPUTE_TASK;
	computeTask.next=&ioTask;
	ioTask.taskType=IO_TASK;
	ioTask.next=NULL;

	int parentProcess = 1;
	int childProcessNum = 0;

	while(NULL!=curTask)
	{
		if(curTask->taskType==IO_TASK)
			gettimeofday(&IOTaskStartTime,NULL);
		else
			gettimeofday(&computeTaskStartTime,NULL);
		fpid=fork();
		if(0==fpid)
		{//This is the child process
			parentProcess=0;
			break;
		}
		else if(-1==fpid)
		{
			printf("Generate child Process error!\n");
			exit(0);
		}

		wait(NULL);  //wait the child process finish execution
		
		if(COMPUTE_TASK==curTask->taskType)
			gettimeofday(&computeTaskEndTime,NULL);
		else
			gettimeofday(&IOTaskEndTime,NULL);
		printf("Generate child process with pid:%d\n",fpid);

		++childProcessNum;
		curTask=curTask->next;

	}

	if(parentProcess==0)
	{
		if(curTask->taskType==IO_TASK)
		{
			executeIOTask();
			printf("This is a IO task, pid:%d parent pid:%d\n",getpid(),getppid());//Print process ID and parent process ID
		}
		if(curTask->taskType==COMPUTE_TASK)
		{
			executeComputeTask();
			printf("This is a compute task, pid:%d parent pid:%d\n",getpid(),getppid());//Print process ID and parent process ID
		}
	}
	else
	{
		//Parent Process, we calculate the time for executing computing task and the time fo executing IO task
		computeTaskTimeElapse = (double)(computeTaskEndTime.tv_sec - computeTaskStartTime.tv_sec)*1000.0+(double)(computeTaskEndTime.tv_usec - computeTaskStartTime.tv_usec)/1000.0;
		IOTaskTimeElapse = (double)(IOTaskEndTime.tv_sec - IOTaskStartTime.tv_sec)*1000.0+(double)(IOTaskEndTime.tv_usec - IOTaskStartTime.tv_usec)/1000.0;
		totalTimeElapse = (double)(IOTaskEndTime.tv_sec-computeTaskStartTime.tv_sec)*1000.0+(double)(IOTaskEndTime.tv_usec-computeTaskStartTime.tv_usec)/1000.0;
		printf("Compute Task Time Consume:%fms, IO Task Time Consume: %fms, Total Time Consume:%fms \n", computeTaskTimeElapse,IOTaskTimeElapse,totalTimeElapse);
	}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java高并发程序设计是指在Java编程语言中,能够有效地处理大量并发请求的程序设计方法和技巧。 首先,Java高并发程序设计需要利用多线程来处理并发请求。通过创建多个线程来同时处理不同的任务,可以提高程序的并发处理能力。可以使用Java内置的Thread类或者实现Runnable接口来创建多线程,并且可以使用线程池来管理线程的创建和销毁,以提高效率。 其次,Java高并发程序设计需要考虑线程安全性。由于多个线程同时访问共享数据可能会引发数据竞争和不一致的问题,因此需要使用同步机制来确保线程的安全性。可以使用synchronized关键字、Lock接口等来实现线程的同步操作,并保证数据的一致性。 另外,Java高并发程序设计还需要考虑资源管理和性能优化。并发程序往往需要频繁地进行数据读写、线程调度等操作,因此需要合理地管理资源,避免资源的过度竞争和浪费。可以使用线程池来管理线程,并配置合适的线程池大小、线程池参数等来提高程序的性能。 此外,还可以使用非阻塞I/O、异步编程等技术来提高程序的响应速度和并发能力。非阻塞I/O可以减少线程等待的时间,提高I/O操作的效率。异步编程可以减少线程的阻塞时间,提高程序的并发处理能力。 总之,Java高并发程序设计是一门复杂的技术,涉及线程管理、数据同步、资源管理和性能优化等方面。通过合理地使用多线程、同步机制和优化技术,可以提高Java程序的并发处理能力,从而更好地满足大量并发请求的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDsoup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值