如何实现javascript多线程同时运行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现javascript多线程同时运行?相关的知识,希望对你有一定的参考价值。
我用vs2010编写了一个平铺几个chrome内核的浏览器窗口的框架,通过后台探测每个浏览器里面同时在运行javascript的动态代码,但是总是一个浏览器里面动态展现之后另几个浏览器才一次性把所有内容显示出来,没有了动态。我猜想的是因为chrome内核在运行javascript的机制问题,如果换用ie内核的话就会一起联动。有没有高手知道这个问题该如何解决呢?
javascript没有多线程,所以也不存在多线程同时运行的说法。平时写代码的时候需要考虑尽量避免线程阻塞。比较好的方法就是尽量使用异步+回调的方式进行处理。 参考技术A javascript是单线程模式,因此不能多任务同时运行。
写代码的时候需要考虑尽量避免线程阻塞。
解决方法:尽量使用异步+回调的方式进行处理。 参考技术B 不可以。javascript是只能在一个线程中顺序执行的。
js有时候给人造成可以并发执行错觉,是因为js跟外部线程之间是可以并发执行的。
js执行过程实际上就是不停地在一个消息循环队列中读取事件。 参考技术C chrome 的JS是V8核心,而现在最出名的服务端JS:nodejs 就是V8 核心,V8 是单线程的,不需要考虑多线程。本回答被提问者采纳
用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数?
我用系统时间作为种子,发现因为各个线程之间运行的时间差太小,所以产生的随机数还是相同的。网上有种方法可以用微秒级的时间作种子,但我没看懂,不知道谁能帮忙解释下不?或者有其他方法也欢迎提出。不过在srand前让线程sleep的方法就不需要了,因为我这里的情况要求线程之间要同时运行。
1、使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,设一个bool变量flag共享,然后beep的时候设为false,beep完设成true。fun()里面每次看一下这个flag,是false的话就不做动作等下一秒,基本可以满足需求。
2、例程:
#include <pthread.h>#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number=0, i;
void *thread1()
printf ("thread1 : I'm thread 1\\n");
for (i = 0; i < MAX; i++)
printf("thread1 : number = %d\\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(2);
printf("thread1 :主函数在等我完成任务吗?\\n");
pthread_exit(NULL);
void *thread2()
printf("thread2 : I'm thread 2\\n");
for (i = 0; i < MAX; i++)
printf("thread2 : number = %d\\n",number);
pthread_mutex_lock(&mut);
number++;
pthread_mutex_unlock(&mut);
sleep(3);
printf("thread2 :主函数在等我完成任务吗?\\n");
pthread_exit(NULL);
void thread_create(void)
int temp;
memset(&thread, 0, sizeof(thread)); //comment1
/*创建线程*/
if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2
printf("线程1创建失败!\\n");
else
printf("线程1被创建\\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3
printf("线程2创建失败");
else
printf("线程2被创建\\n");
void thread_wait(void)
/*等待线程结束*/
if(thread[0] !=0) //comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\\n");
if(thread[1] !=0) //comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\\n");
int main()
/*用默认属性初始化互斥锁*/
pthread_mutex_init(&mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\\n");
thread_wait();
return 0;
参考技术A 你用 (系统时间 - 线程 id*10) 作种子 就可以了。
种子变了,随机数系列就会变。
或 一个线程种子用 srand(1234); 另一个用 srand(4321); ...
加 系统时间 目的是 每次跑程序 随机数系列不同,更符合“随机”。本回答被提问者采纳
以上是关于如何实现javascript多线程同时运行?的主要内容,如果未能解决你的问题,请参考以下文章
用C语言如何实现多线程同时运行的情况下,各个线程输出不同的随机数?