协程与多任务调度

在计算机科学中,多任务(multitasking)是指在同一个时间段内运行多个任务,现代计算机作为一个复杂的系统,运行的任务往往不止一个,所以多任务调度对于计算机来说尤为重要。现阶段多任务调度主要分为抢占式多任务和协作式多任务,抢占式多任务由操作系统决定进程的调度方案,而协作式多任务是当前任务主动放弃执行后,下一个任务继续进行。由于协作式任务管理受恶意程序的威胁更大,现阶段几乎所有的计算机都采用抢占式多任务管理。
多任务处理
现阶段,主要靠多进程或多线程的方式来实现多任务:

#include <stdio.h>
#include <unistd.h>

int main()
{
	pid_t pid;
	pid = fork();

	if(pid < 0){
		printf("Fork Error!\n");
	}else if (pid > 0){
		printf("This is the parent Process! Process Id is %d, Child id is %d\n",getpid(),pid);
		int i = 0;
		while(i < 10){
			printf("This is parent Process output of i %d!\n",i);
			i++;
		}
	}else if (pid == 0){
		printf("This is the child Process! Process Id is %d, parent id is %d\n",getpid(),getppid());
		int j = 0;
		while(j < 10){
			printf("This is child Process output of j %d\n",j);
			j++;
		}
	}
	return 0;
}

...阅读更多>>

协程与yield

协程,又称微线程或纤程,是一个比进程和线程更加轻量级的解决方案,现代编程语言基本上都支持。那么协程究竟有什么特点,它是如何运作的呢?
协程与yield
进程和线程之间的关系我在这篇文章中做了一下比较分析。线程是程序的运行流,所有指令从头到尾按顺序一一执行,进程则是包含线程的容器。在单核CPU中,永远只有一条线程在运行,当然也只可能有一个进程运行,由操作系统内核负责进程和线程的切换。而协程是属于用户空间的,操作系统对其一无所知,由用户自己去做调度。显然用户自己调度比通过使用一个中断让操作系统调度会快很多,这就是协程快的秘诀了。 …阅读更多>>