社区
下载资源悬赏专区
帖子详情
ASP源码—小计天空中英双语企业站.zip下载
weixin_39820835
2023-11-18 21:30:22
ASP源码—小计天空中英双语企业站.zip , 相关下载链接:
https://download.csdn.net/download/m0_62396648/88497971?utm_source=bbsseo
...全文
浏览
回复
打赏
收藏
ASP源码—小计天空中英双语企业站.zip下载
ASP源码—小计天空中英双语企业站.zip , 相关下载链接:https://download.csdn.net/download/m0_62396648/88497971?utm_source=bbsseo
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
一个进程池的服务器程序
一个进程池的服务器程序 下面做了非常简单的http服务器,该服务器只能接收Get请求。 流程大概如下: 1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe) 2,父进程预fork n个子进程 3,各个子进程accept(listenfd),即所有子进程竞争accept请求。由于listenfd是在fork之前就有的,所以所有子进程都可以访问到,不需用到“进程间文件描述符传递”问题; 4,子进程每accept到一个请求都告诉父进程,父进程把请求数加1;子进程没完成一个请求,父进程把请求数减1;当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。 总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。 代码如下: 代码如下: #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PRECHILD 5 #define MAXCHILD 50 #define BUFSIZE 4096 #define PIDPATH "pid" #define head503 "HTTP/1.1 503 Service unavailable\r\n" #define head404 "HTTP/1.1 404 Not Found\r\n" #define head200 "HTTP/1.1 200 0K\n\rContent—Type: text/html\n\rContent—Length: " int len503, len404, len200; int fd1[2], fd2[2]; typedef struct { pid_t pid; char status; // 'n' means new request; 'f' means finish the request } REPORT; void answer(int listenfd) { int connfd; char buf[BUFSIZE]; int count; int pid = getpid(); struct sockaddr_in cliaddr; int size = sizeof(cliaddr); char comm; REPORT rep; rep.pid = pid; while (1) { connfd = accept(listenfd, (struct sockaddr *)&cliaddr,(socklen_t *)&size ); //子进程accept请求 rep.status = 'n'; if (write(fd1[1], &rep, sizeof(rep)) < 0) { //通知父进程已经accept了请求 perror("write pipe new failed"); exit(-1); } count = read(connfd, buf, BUFSIZE); char req[10]; char filepath[256]; sscanf(buf, "%s%s", req, filepath + 1); filepath[0] = '.'; if (strcmp("GET", req) != 0) {//503 write(connfd, head503, len503); //goto err_out; close(connfd); exit(-1); } char content[BUFSIZE]; struct stat stbuf; if (lstat(filepath, &stbuf) != 0) { int err = errno; if (err == ENOENT) {//404 write(connfd, head404, len404); } close(connfd); exit(-1); } count = write(connfd, head200, len200); u_int filesize = stbuf.st_size; sprintf(content, "%u\n\r\n\r", filesize); count = write(connfd, content, strlen(content)); FILE *fp = fopen(filepath, "r"); if (fp == NULL) { printf("open file %s failed\n", filepath); close(connfd); exit(-1); } while((count = fread(content, 1, sizeof(content), fp)) > 0) { //printf("%s", content); if (write(connfd, content, count) != count) { printf("write failed\n"); } } fclose(fp); close(connfd); rep.status = 'f'; if (write(fd1[1], &rep, sizeof(rep)) < 0) {//告诉父进程自己处理完了请求 perror("write pipe finish failed"); exit(-1); } if (read(fd2[0], &comm, 1) < 1) {//等待来自父进程的命令 perror("read pipe failed"); exit(-1); } //printf("[%d] reve %c from pa\n", pid, comm); if (comm == 'e') { //收到exit命令 printf("[%d] exit\n", pid); exit(-1); } else if (comm == 'c') { //收到继续accept的命令 printf("[%d] continue\n", pid); } else { printf("[%d] comm : %c illeagle\n", pid, comm); } } } void usage() { printf("Usage: http-serv port\n"); } int write_pid() { int fd; if ((fd = open(PIDPATH, O_WRONLY | O_TRUNC | O_CREAT, S_IWUSR)) < 0){ perror("open pidfile faild"); return -1; } struct flock lock; lock.l_type = F_WRLCK; lock.l_start = 0; lock.l_whence = SEEK_SET; lock.l_len = 0; if (fcntl(fd, F_SETLK, &lock) == -1) { int err = errno; perror("fcntl faild"); if (err == EAGAIN) { printf("Another http-serv process is running now!\n"); } return -1; } return 0; } void daemon_init() { //clear file creation mask; umask(0); //become a session leader if (fork() != 0) exit(-1); if (setsid() < 0) exit(-1); //make sure can be never get the TTY control if (fork() != 0) exit(-1); //may chdir here int i; for (i = 0; i < 1024; i++) close(i); /* * Attach file descriptors 0, 1, and 2 to /dev/null. */ int fd0, fd1, fd2; fd0 = open("/dev/null", O_RDWR); fd1 = dup(0); fd2 = dup(0); if (fd0 != 0 || fd1 != 1 || fd2 != 2) { printf("init failed\n"); exit(-1); } } int main(int argc, char **argv) { int listenfd; struct sockaddr_in servaddr; pid_t pid; if (argc != 2) { usage(); return -1; } signal(SIGCHLD, SIG_IGN); len200 = strlen(head200); len404 = strlen(head404); len503 = strlen(head503); daemon_init(); //转为后台程序,如需打印调试,把这行注释掉 if (write_pid() < 0) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) < 0) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) < 0) { perror("pipe failed"); exit(-1); } int port = atoi(argv[1]); //initialize servaddr and listenfd... bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); listenfd = socket(AF_INET, SOCK_STREAM, 0); bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); listen(listenfd, 1000); int i; for (i = 0; i < PRECHILD ; i++) { //父进程预fork 子进程 if ((pid = fork()) < 0) { perror("fork faild"); exit(3); } else if (pid == 0) { answer(listenfd); } else { printf("have create child %d\n", pid); } } char e = 'e'; char c = 'c'; int req_num = 0; int child_num = PRECHILD; REPORT rep; while (1) { //printf("req_num = %d, child_num = %d\n", req_num, child_num); if (read(fd1[0], &rep, sizeof(rep)) < sizeof(rep)) {//等待子进程发来消息 perror("parent read pipe failed"); exit(-1); } //printf("parent: receive from %d\n", pid); if (rep.status == 'n') {//子进程刚accept了新的请求 req_num ++; printf("parent: %d have receive new request\n", rep.pid); if (req_num >= child_num && child_num <= MAXCHILD) { //请求数过多,创建更多子进程 if ((pid = fork()) < 0) { perror("fork faild"); exit(3); } else if (pid == 0) { answer(listenfd); } else { printf("have create child %d\n", pid); child_num ++; } } } else if (rep.status == 'f') {//子进程刚处理完了一个请求 req_num --; //printf("parent: %d have finish a request\n", rep.pid); if (child_num > (req_num + 1) && child_num > PRECHILD) {//子进程数过多,删除多余的子进程 if (write(fd2[1], &e, sizeof(e)) < sizeof(e)) { perror("pa write pipe failed"); exit(-2); } //printf("tell child exit\n"); child_num --; } else { if (write(fd2[1], &c, sizeof(c)) < sizeof(c)) {//让子进程继续等待accept perror("pa write pipe failed"); exit(-2); } //printf("tell child continue\n"); } } } return 0; } 利用fork()创建多个子进程 11:09 pm on Oct 23rd 2010 greenMay 之间我学习了创建一个子进程,也大致理解了子进程与父进程的关系。今天无意间遇到一个创建多个子进程的问题,结果还发现了点小bug,现在写下来和大家分享。 我需要实现的目标如下:编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。 一开始我的主要代码如下: view source print? 01 int main() 02 { 03 pid_t child1; 04 pid_t child2; 05 child1 = fork(); 06 child2 = fork(); 07 if(child1 == 0) 08 { 09 printf("Child1:a\n"); 10 return 0; 11 } 12 if(child2 == 0) 13 { 14 printf("Child2:b\n"); 15 return 0; 16 } 17 else 18 { 19 waitpid(child1,NULL,0); 20 waitpid(child2,NULL,0); 21 printf("Parent:c\n"); 22 } 23 return 0; 24 } 奇怪的是,我得到的是这样一个结果: Child1:a Child1:a Child2:b Parent:c 竟然有两个Child1。可是我的代码里明明只是让Chidl1打印一次啊。搜索到一篇好的博文。文章仔细分析了和我几乎相同的情况。事实上,是我的粗心和对fork()的理解不深刻导致了上述的奇怪问题。 我们知道,fork()之后,我们还是首先执行的是父进程,也就是如下代码段: view source print? 1 waitpid(child1,NULL,0); 2 waitpid(child2,NULL,0); 3 printf("Parent:c\n"); 然后waitpid(child1,NULL,0),进入child1的执行。child1将要执行的是如下的的代码段: view source print? 1 child2 = fork(); 2 if(child1 == 0) 3 { 4 printf("Child1:a\n"); 5 return 0; 6 } 注意,第一行的那个child2 = fork()!这就意味着对于child1来说,它自己又要创建一个子进程,这时候他成为了父亲。这时候,它有一个儿子child2,但是这个child2不同与我们刚才定义的那个child2,这个child2其实是parent的孙子。之所以又打印了一边Child1。如果加上如下代码就明白了: view source print? 01 child2 = fork(); 02 if(child1 == 0) 03 { 04 if(child2 == 0) 05 { 06 printf("GrandChild!\n"); 07 } 08 printf("Child1:a\n"); 09 return 0; 10 } 这时候将出现: Child1:a GrandChild! Child1:a Child2:b Parent:c 恩,这就很明白了!我无意间多调用了一次child2=fork(); 所以,如果要达到我最初的目的,需要改变child2的fork()的位置: view source print? 01 #include
02 #include
03 #include
04 #include
05 int main() 06 { 07 pid_t child1; 08 pid_t child2; 09 child1 = fork(); 10 child2 = fork(); 11 if(child1 == 0) 12 { 13 printf("Child1:a\n"); 14 return 0; 15 } 16 if(child2 == 0) 17 { 18 printf("Child2:b\n"); 19 return 0; 20 } 21 else 22 { 23 waitpid(child1,NULL,0); 24 waitpid(child2,NULL,0); 25 printf("Parent:c\n"); 26 } 27 return 0; 28 } 我参照的那个博文最后给出了一个更为普遍的fork()创建
多进程
的程序框架: view source print? 01 pid_t create_child() 02 { 03 pid_t p = fork(); 04 if( p == 0 ) 05 { 06 printf("in child %d\n", getpid()); 07 //do something 08 return 0; 09 } 10 return p; 11 } 12 int main(void) 13 { 14 pid_t p1 = create_child(); 15 pid_t p2 = create_child(); 16 17 int st1, st2; 18 waitpid( p1, &st1, 0); 19 waitpid( p2, &st2, 0); 20 printf("in parent, pid = %d\n", getpid()); 21 printf("in parent, child 1 exited with %d\n", st1); 22 printf("in parent, child 2 exited with %d\n", st2); 23 return 0; 24 } 注意到,期中的create_child()函数最后有一个return p。这个return p将pid返回给了父进程,其实也是将子进程对于CPU的控制权交还给了父进程,这样就避免了多个子进程在创建之时互相影响了。 可以说,今天的这个问题真是一个有趣的事情。代码有的时候就是这么奇怪~ 最后,向我引用的那篇文章致敬! Linux内核对
多进程
和多线程的支持方式: 线程机制支持并发程序设计技术,在多处理器上能真正保证并行处理。而在linux实现线程很特别,linux把所有的线程都当作进程实现。linux下线程看起来就像普通进程(只是该进程和其他进程共享资源,如地址空间)。上述机制与Microsoft windows或是Sun Solaris实现差异很大。 Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参数调用do_fork()核内API。 do_fork() 提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当使用fork系统调用产生
多进程
时,内核调用do_fork()不使用任何共享属性,进程拥有独立的运行环境。当使用pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone(),而这些参数又全部传给核内的do_fork(),从而创建的”进程”拥有共享的运行环境,只有栈是独立的,由 __clone()传入。 即:Linux下不管是多线程编程还是
多进程
编程,最终都是用do_fork实现的
多进程
编程,只是进程创建时的参数不同,从而导致有不同的共享环境。Linux线程在核内是以轻量级进程的形式存在的,拥有独立的进程表项,而所有的创建、同步、删除等操作都在核外pthread库中进行。pthread 库使用一个管理线程(__pthread_manager() ,每个进程独立且唯一)来管理线程的创建和终止,为线程分配线程ID,发送线程相关的信号,而主线程pthread_create()) 的调用者则通过管道将请求信息传给管理线程。 很多朋友都说使用多线程的好处是资源占用少,其隐含之意就是说进程占用资源比线程多,对吧?但实际上Linux下
多进程
是否就真的点用很多资源呢?暂且不说进程是否比线程占用资源多,就进程占用资源的多少情况而言,Linux确实是做得相当节省的。产生一个
多进程
时肯定是要产生的一点内存是要复制进程表项,即一个task_struct结构,但这个结构本身做得相当小巧。其它对于一个进程来说必须有的数据段、代码段、堆栈段是不是全盘复制呢?对于
多进程
来说,代码段是肯定不用复制的,因为父进程和各子进程的代码段是相同的,数据段和堆栈段呢?也不一定,因为在Linux里广泛使用的一个技术叫copy-on-write,即写时拷贝。copy-on-write意味着什么呢?意味着资源节省,假设有一个变量x在父进程里存在,当这个父进程创建一个子进程或多个子进程时这个变量x是否复制到了子进程的内存空间呢?不会的,子进程和父进程使用同一个内存空间的变量,但当子进程或父进程要改变变量x的值时就会复制该变量,从而导致父子进程里的变量值不同。父子进程变量是互不影响的,由于父子进程地址空间是完全隔开的,变量的地址可以是完全相同的。 Linux的”线程”和”进程”实际上处于一个调度层次,共享一个进程标识符空间,这种限制使得不可能在Linux上实现完全意义上的POSIX线程机制,因此众多的Linux线程库实现尝试都只能尽可能实现POSIX的绝大部分语义,并在功能上尽可能逼近。Linux进程的创建是非常迅速的。内核设计与实现一书中甚至指出Linux创建进程的速度和其他针对线程优化的操作系统(Windows,Solaris)创建线程的速度相比,测试结果非常的好,也就是说创建速度很快。由于异步信号是内核以进程为单位分发的,而LinuxThreads的每个线程对内核来说都是一个进程,且没有实现”线程组”,因此,某些语义不符合POSIX标准,比如没有实现向进程中所有线程发送信号,README对此作了说明。LinuxThreads中的线程同步很大程度上是建立在信号基础上的,这种通过内核复杂的信号处理机制的同步方式,效率一直是个问题。LinuxThreads 的问题,特别是兼容性上的问题,严重阻碍了Linux上的跨平台应用(如Apache)采用多线程设计,从而使得Linux上的线程应用一直保持在比较低的水平。在Linux社区中,已经有很多人在为改进线程性能而努力,其中既包括用户级线程库,也包括核心级和用户级配合改进的线程库。目前最为人看好的有两个项目,一个是RedHat公司牵头研发的NPTL(Native Posix Thread Library),另一个则是IBM投资开发的NGPT(Next Generation Posix Threading),二者都是围绕完全兼容POSIX 1003.1c,同时在核内和核外做工作以而实现多对多线程模型。这两种模型都在一定程度上弥补了LinuxThreads的缺点,且都是重起炉灶全新设计的。 综上所述的结论是在Linux下编程多用
多进程
编程少用多线程编程。 IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(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理解最为深刻的,他们的意见应该具有很大的参考意义 1. 散沙 2010年7月10日08:43 回复 | 引用 | #1 文章很有深度,我们把握一个尺度就可以了,在windows下使用线程,unix下则使用进程就可以了 2. rjoo 2010年9月9日13:49 回复 | 引用 | #2 错的太多了,博主,应该看看新资料了。 现在都2010年了,NPTL早就取代了老的Linux thread。而且通常多线程有性能优势,但是
多进程
更稳定,并且通常性能瓶颈不在于是进程模型还是线程模型而在于IO。 3. rjoo 2010年9月9日13:56 回复 | 引用 | #3 关于那个critical section和pthread_mutex_t,critical section本质上是一个自旋锁,短期锁当然快,不知道你说的那个IBM的哥们怎么比的,要比也该是和pthread_spinlock_t比。 4. admin 2010年9月9日17:28 回复 | 引用 | #4 rjoo挺热心的,呵呵,这篇文章不是我写的,但有几个地方我可以解答一下: 1. Linux下没有线程的概念,pthread线程实质是通过轻量级进程实现的。你说瓶颈在IO,这一点我很赞同你的意见,作者如果能再写个IO操作的文章来的话就会更好了。 2. mutex和critical section的确是不能比的。一个涉及到内核,一个没有涉及到内核。呵呵,很佩服你对这些东西的掌握程度,有机会多交流。 ^_^ 5. 定时 2010年9月9日17:40 回复 | 引用 | #5 我们组的最近项目的经验告诉我们能用
多进程
不用多线程,多线程安全编程难,而且锁会早成效率很低,甚至不如单线程,你说的NPTL我知道,他只是多线程优化了并不能改变多线程安全编程的问题,锁的问题。谢谢指教,实践出真知。 @rjoo 6. 定时 2010年9月9日17:44 回复 | 引用 | #6 你说的锁,我确实不太了解,但是我们leader对它很了解,就是最近的一个项目,锁搞得他很郁闷,他也终于同意我的关键,尽可能不用多线程。 @rjoo 7. rjoo 2010年9月29日13:41 回复 | 引用 | #7 @admin Linux下没有线程的概念,pthread线程实质是通过轻量级进程实现的—这是2.4内核以前的情况(实际上是2.0时引入的,那可实在是太久了),2.4内核引入NGPL,2.6内核线程支持改为NPTL。NPTL实现的是1:1的线程模型(有资料说Win也是这种实现,虽然不太确定,但我觉得可能性很大),而NGPT虽然是理论上最先进的m:n线程模型,但最后实现出来的性能差NPTL一大截,最后被抛弃。看看文中说法就知道要么文章写的很早,要么作者看了一堆十年前的资料。 给个链接: http://www.kegel.com/c10k.html#threads.linuxthreads 8. finalday 2010年10月15日17:26 回复 | 引用 | #8 忍不住跳出来说,作者对并发编程的理解还不行。 比如说锁的问题,说得好像是多线程才需要的东西一样。如果一个应用
多进程
时完全不用锁,多线程也就多一个轻量级锁——锁一下,各回各家,每个线程用自己的专有存储,之后不就和
多进程
一样了?这样会被搞得很郁闷?当然不会。所以说明那个应用对于数据共享的需求不是这么简单,既然不是这么简单,
多进程
程序一样要加锁。
多进程
的加解锁代价可比多线程大得多了,共享数据和协作也麻烦多了。 多线程编程难不难?难,但这是由于并发本身的难度引起的。“锁”,“安全编程”不管是多线程还是
多进程
都一样会遇到。 多线程的最大优点是数据共享和协作方便。
多进程
的最大优点是挂了一个进程不会影响其他进程,资源也不会泄露,故比较能容忍程序员犯错。 至于两者裸奔比性能,真的没啥意义。
交通智能APP.pptx
交通应用的改革 2022 创新交通·智能未来 交通智能APP全文共12页,当前为第1页。 CONTENTS 对交通产品的深度剖析 产品相关介绍 根据互联网应用的发展对交通智能化的改革 产品设计思路 产品未来的深度规划 产品发展规划 交通智能APP全文共12页,当前为第2页。 产品相关介绍 PART 01 交通智能APP全文共12页,当前为第3页。 01 产品相关介绍 就当前的现状来看,我国交通管理办法在实施过程中仍然存在着某些不可忽视的问题,影响到了交通运输环境的安全性,且诱发了交通堵塞问题。因而在此基础上,为了打造良好的交通运输空间,要求我国交通管理部门在管理工作实施过程中应注重不断完善交通管理基础设备等,由此来提升中国交通整体管理水平,满足人们出行需求。 当今社会交通管理情况分析 基于城市化进程不断加快的背景下,其对城市交通管理亦提出了更高的要求,因而在此基础上,为了缓解当前城市发展过程中呈现出的服务水平下降、交通拥堵等问题,要求我国在可持续发展过程中应注重强调对交通供给领域的调整,并实施相应的交通管理机制,以此来确保现有交通资源的高效应用,营造良好的交通管理氛围。 交通智能APP全文共12页,当前为第4页。 01 交通管理三大措施 交通信号灯是指挥交通运行的信号灯,一般由红灯、绿灯、黄灯组成。现我国的城镇交通信号灯多由对应交警进行手动输入管理 交通信号灯(手动工具) 维护城乡道路交通秩序和公路治安秩序的主要负责人。其主要职责是交通秩序管理、交通事故勘察、交通犯罪侦查、车辆和驾驶人管理等。 交警(人工) "智能交通违章监摄管理系统"的俗称,通过对车辆检测、光电成像、自动控制、网络通信、计算机等多种技术,对机动车闯红灯、逆行、超速、越线行驶、违例停靠等违章行为,实现全天候监视,捕捉车辆违章图文信息,并根据违章信息进行事后处理。 电子眼/天网(智能工具) 交通智能APP全文共12页,当前为第5页。 01 交通的进化历程 纯人力指挥 改革前 加入红绿灯设备,辅助人力指挥 改革开放 加入电子眼、天网等设备 加入中控设备 辅助人力指挥 开启全自动智能化交通管理。 人力完全辅助设备进行管理 未来展望 互联网时代 交通智能APP全文共12页,当前为第6页。 01 面临问题 手动调控红绿灯,效率低下,且对应急情况的时间掌控上存在极大问题 问题一 我国交通管理部门在实施管理工作过程中始终秉承着单独设计、单独管理、单独规划的管理原则,即未建构成熟的管理模式,继而在一定程度上影响到了交通环境管理成效,同时亦诱发了投入浪费的现象。为此,交通行业在可持续发展过程中应注重强调对此问题展开行之有效的处理。另外,我国智能交通中心仍然处在不完备的状态下,即未引进先进的信息技术手段,继而与发达国家相比,我国交通管理系统仍然存在着分散的问题,同时无法实现对交通事件的高效监控。 交通可视化管理存在一定的大局掌控缺失,依旧依靠人力进行通告 问题二 交通智能APP全文共12页,当前为第7页。 产品设计思路 PART 02 交通智能APP全文共12页,当前为第8页。 02 功能介绍 交警通过应用,登录所在管辖街区,并能一键自动管理红绿灯设备 智能红绿灯 中控自动化调配 为交警减负,减少体力成本,高效管理 交通指挥中心可视化调配交警运力,并能全面控制城市交通设备 交通智能APP全文共12页,当前为第9页。 02 产品效能 交通设备通过应用智能管理,极大提升了时间成本 节约时间成本 当交通存在重大问题时,通过智能设备及时管理能应付大部分交通问题,及时而高效 立即解决应急问题 指挥中心能迅速掌握全市交通设备设置问题,并推算运输力的时间消耗,能迅速做出反应,进行人力调配 指挥
调度问题
交通智能APP全文共12页,当前为第10页。 产品规划 PART 03 交通智能APP全文共12页,当前为第11页。 03 产品规划步骤 交通硬件设备需要进行全面升级成联网模式,启动智能化联网管理体系,与现今的电子眼、天眼等设备进行同步的联网,实现真正的海陆空三间覆盖管理。 交通硬件设备进行全面改革 与交通硬件设备进行匹配,并能通过网络进行相应管理。 交通应用软件研发 交通智能APP全文共12页,当前为第12页。
ULima_JAVA_Repaso:Progra Java 2015I评估
审查 Progra Java 2015-I评估 ## 1。 文件(10分)zip包含数据,2个文件->数据坐标| 数据坐标为二进制数据为随机访问*期末考试的问题是同步| 带交通信号灯| 带锁| 带闩锁| 有障碍| 以及可能的变体 ##二。 提出理论上的标记abc的可能:对它进行建模或编程的案例。 ##理论评论:###线程:#####多任务与
多进程
:在多任务中,您同时执行多个进程,而在
多进程
中则意味着并行处理,即一个任务同时在多个进程中运行。 为此,任务分为多个线程。 在多任务处理中,任务进入处理器,并带有处理器使用时间,伪古旧主义。 操作系统使用进程调度程序。 有两种类型的多任务处理,一种是协作的,由
多进程
处理确定进程将在CPU或处理器中运行多长时间。 ### 1)原子变量它们同步一个简单变量,而不是原始变量,它们被同步使用:所有方法都同步:ThreadSafe ##### a)标量原
若干源程序资料12.rar
0 1.txt 2012-06-11 21:42 554,081 13 套ROOTKITS源码—Windows内核的安全防护.rar 2012-06-11 21:41 1,322,993 1)华为研发(pdf版).pdf 2012-06-11 21:07 9,883 806419蚁群算法程序.rar 2012-06-11 21:40 60 access连接字符串.txt 2012-06-11 21:08 666 adc-test.c 2012-06-11 21:07 765,000 AS3游戏编程大学.pdf 2012-06-11 21:40 750,563 ATL开发指南源码.rar 2012-06-11 21:05 186,863 BIOS练习工具加BIOS完全手册.rar 2012-06-11 21:03 340,134 C++ Primer Plus.第五版.习题解答和例题代码.rar 2012-06-11 21:03 956,190 C++ Primer中文版(第4版)中的源代码.rar 2012-06-11 21:12 1,386,523 C++-打飞机的游戏.rar 2012-06-11 21:06 78,719 C++USB接口的鼠标驱动源程序.rar 2012-06-11 21:07 50,067 C++VC编写的退火算法.rar 2012-06-11 21:06 67,891 C++一示所有点阵字库内容的工具源代码.rar 2012-06-11 21:11 60,547 C++工会管理系统源代码.rar 2012-06-11 21:22 2,618,588 COM技术内幕源码.rar 2012-06-11 21:16 97,280 C语言 内存管理详解.doc 2012-06-11 21:06 387,499 c语言写的一个多任务内核.rar 2012-06-11 21:15 6,669,174 C语言常用算法集(人手一份).pdf 2012-06-11 21:44 2,279 C语言编一个程序完成64位数据(无符号)的加法,减法运算.txt 2012-06-11 21:43 1,480,155 Direct3D加载3d文件.rar 2012-06-11 21:29 22,102 DSP编程一周通.rar 2012-06-11 21:04 837,926 fatfs-0.08b.zip 2012-06-11 21:11 48,640 FFT算法.doc 2012-06-11 21:28 10,891,658 GPS应用程序设计.程序源代码.rar 2012-06-11 21:20 610,619 gram_analysis.rar 2012-06-11 21:38 536,654 HTML、CSS、JavaScript标签参考.pdf 2012-06-11 21:00 29,184 inline-block深入理解.doc 2012-06-11 21:44 6,947,979 Linux内核完全注释V3.0书签版(带源码).rar 2012-06-11 21:31 11,599 MATLAB仿真程序OFDM程序.txt 2012-06-11 21:37 14,584,477 msdn for vb6.0简体中文版.zip 2012-06-11 21:02 12,288 OpenCV 测试代码.doc 2012-06-11 21:41 0 OpenGL编程基础 源码.zip 2012-06-11 21:26 55,505 PHP实现多服务器共享SESSION数据.docx 2012-06-11 21:40 49,392 Pointers on C.zip 2012-06-11 21:22 3,386,253 RTOS_MDK uCOS-II for STM32(LCD5110).rar 2012-06-11 21:19 26,179 Ruby批量编译C源程序.pdf 2012-06-11 21:02 383,822 SPI总线操作E2PROM(本例为25AA020A)实例——浅影.pdf 2012-06-11 21:31 5,665 SSL欺骗全面解析.txt 2012-06-11 21:03 596,394 TC打地鼠.rar 2012-06-11 21:24 10,293 tftp.rar 2012-06-11 21:07 172,570 uC-GUI-字体转换.rar 2012-06-11 21:11 2,872,837 vb酒店客房管理信息系统.rar 2012-06-11 21:05 161,792 vb黑客木马编程(精选大全)(免费).doc 2012-06-11 21:01 909,116 VC++动态链接库(DLL)编程.pdf 2012-06-11 21:25 138,752 VC++开发BHO插件——定制你的浏览器.doc 2012-06-11 21:33 800,368 VC绘图 游戏简易教程.pdf 2012-06-11 21:41 21,331 ViewTextFileInWinCE-EVC源代码工程.rar 2012-06-11 21:11 27,271,175 Visual C++.NET小游戏开发时尚编程百例.rar 2012-06-11 21:42 275,968 Window7系统如何安装Visual_C++_6.0.doc 2012-06-11 21:26 2,399,725 windows API 一日一练.pdf 2012-06-11 21:28 249,332 Windows核心编程源码.rar 2012-06-11 21:40 1,000,923 Windows程序设计(第5版)配套代码.rar 2012-06-11 21:31 5,504,736 《PC游戏编程(网络游戏篇)》光盘源代码.rar 2012-06-11 21:09 461,754 一个各种着名算法问题的c源程序包,推荐.rar 2012-06-11 21:37 125,952 三种网页跳转代码.doc 2012-06-11 21:42 4,478,005 中国象棋C++(1).rar 2012-06-11 21:42 4,478,005 中国象棋C++.rar 2012-06-11 21:10 18,808 为智能电子钟添加阴历计时功能.rar 2012-06-11 21:35 38,896 二叉树的遍历.zip 2012-06-11 21:13 224,515 人脸识别源程序(1).rar 2012-06-11 21:13 224,515 人脸识别源程序.rar 2012-06-11 21:13 47,584 仿真终端vt100.rar 2012-06-11 21:35 50,176 关于c语言和汇编语言相互嵌套调用的学习总结.doc 2012-06-11 21:11 190,993 典型算法包.rar 2012-06-11 21:16 264,555 内存管理和设备调试中文.pdf 2012-06-11 21:30 267,989 冈萨雷斯数字图像处理matlab版源码V1.1.3(1).rar 2012-06-11 21:30 267,989 冈萨雷斯数字图像处理matlab版源码V1.1.3.rar 2012-06-11 21:31 429,568 创建嵌入式操作系统.doc 2012-06-11 20:57 2,442 单向链表.txt 2012-06-11 21:10 10,962 单片机控制的仓库粮食害虫检测报警系统.rar 2012-06-11 21:44 0 哈希表实例.zip 2012-06-11 21:13 1,001,214 坦克游戏源代码.zip 2012-06-11 21:17 183,973 基于ATmega8 的ucos-II应用.rar 2012-06-11 21:01 12,345,799 基于FGPA的PCM编译码模块设计.zip 2012-06-11 21:06 3,769,694 基于LABVIEW编程环境的SQLSERVER ACCESS MYSQL 数据库的测试源代码.rar 2012-06-11 21:12 81,505 基于神经网络的文字识别系统.rar 2012-06-11 21:07 39,498 基因遗传算法.zip 2012-06-11 21:07 1,061 基本的时钟中断程序.rar 2012-06-11 21:10 4,071,328 多用电热毯定时器.zip 2012-06-11 21:38 46,080 字符串的输入,删除练习.doc 2012-06-11 21:32 318,464 实验42:L298电机驱动程序(ATme.rar 2012-06-11 21:07 13,091 嵌入式拼音输入法C代码.rar 2012-06-11 21:12 64,623 巴特沃斯、切比雪夫I和椭圆滤波器设计的源程序.zip 2012-06-11 21:29 846,851 并行算法实践-mpi源程序.rar 2012-06-11 21:01 58,368 张军GPS高程总结.doc 2012-06-11 21:18 155,836 微博质量监控程序.rar 2012-06-11 21:35 535,650 微视图像采集卡驱动程序LV8.2.rar 2012-06-11 21:27 5,252 打印源代码.rar 2012-06-11 21:26 57,623 打开计算机的全新世界:云计算.txt 2012-06-11 21:13 98,245 扫雷游戏的源程序(1).zip 2012-06-11 21:13 98,245 扫雷游戏的源程序.zip 2012-06-11 21:40 346 插入排序.txt 2012-06-11 21:41 241,873 操作系统实验三-进程调度.rar 2012-06-11 21:10 16,944 数字闹钟源码.rar 2012-06-11 21:34 2,000,560 数据库登入界面.7z 2012-06-11 21:09 1,553,768 数据结构算法Visual.C.6.0程序集_源码.rar 2012-06-11 21:42 87,040 时域卷积定理的证明.ppt 2012-06-11 21:10 4,371 更改网关IP.rar 2012-06-11 20:57 1,419 栈的实现.txt 2012-06-11 21:18 57,078 汇编数显大型
交通灯
控制.rar 2012-06-11 21:35 1,055,980 流量计算.rar 2012-06-11 21:11 8,198,339 王凡的latex笔记源码v3.rar 2012-06-11 21:34 803 用MATLAB实现图像锐化的程序代码.m 2012-06-11 21:13 31,839 用Visual C++实现排序算法大全.rar 2012-06-11 21:09 27,688 用单片机制作的高精度数显计数器.rar 2012-06-11 21:10 9,654 用单片机实现公历到农历换算的新方法.zip 2012-06-11 21:08 2,318 用英文单词模拟数学计算代码.txt 2012-06-11 21:06 13,654 男生不应该误解女生的15个地方.docx 2012-06-11 21:34 16,410 病毒代码.txt 2012-06-11 21:36 142,693 直方图均衡化的c语言实现.rar 2012-06-11 20:58 58,895 矩形排样-源码.rar 2012-06-11 21:28 44,781 端口转发Consoletransport.rar 2012-06-11 21:02 1,503,848 第1章[1].ASP.NET_3.5与开发工具.pdf 2012-06-11 21:29 8,300 简单文字识别VC代码.txt 2012-06-11 21:32 9,279 粒子群算法的源代码.rar 2012-06-11 21:43 96,320 红黑树源程序.pdf 2012-06-11 21:08 302 给一批WORD加内容的宏.txt 2012-06-11 21:08 554,651 网上书店源码.rar 2012-06-11 21:17 2,668,543 网络爬虫之Java版.rar 2012-06-11 21:00 970,262 网马解密参考手册.pdf 2012-06-11 21:47 151,626,427 若干源程序资料12.rar 2012-06-11 21:43 2,086 获取磁盘剩余空间.ZIP 2012-06-11 21:11 4,731 蓝牙实例.rar 2012-06-11 21:05 11,460 蜂群算法C注释.doc 2012-06-11 21:15 2,194 计算器.rar 2012-06-11 21:39 2,815 课设1——图的创建与遍历.txt 2012-06-11 21:41 975,894 谁动了我的奶酪.pdf 2012-06-11 21:12 27,376 象棋游戏源代码.rar 2012-06-11 21:37 6,814 软件安装之--RPM命令大全!.txt 2012-06-11 21:04 740,663 连连看VB.rar 2012-06-11 21:40 66,980 速度很快解码.rar 2012-06-11 20:57 1,515 链表队列实现.txt 2012-06-11 20:57 9,070 队列的双向链表.txt 2012-06-11 21:39 7,887,246 静态页面开发全集.pdf 2012-06-11 21:13 370,209 飞鸽传书的源代码.rar 2012-06-11 21:33 774,071 高级Linux程序设计.pdf 2012-06-11 21:24 583,680 鸡蛋破损自动检测系统.doc
多线程和
多进程
鱼还是熊掌:浅谈
多进程
多线程的选择 关于
多进程
和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“
多进程
好还是多线程好?”、“Linux下用
多进程
还是多线程?”等等期望一劳永逸的问题,我只能说:没有
下载资源悬赏专区
12,445
社区成员
11,903,918
社区内容
发帖
与我相关
我的任务
下载资源悬赏专区
CSDN 下载资源悬赏专区
复制链接
扫一扫
分享
社区描述
CSDN 下载资源悬赏专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章