单线程解决高并发的思路就是采用非阻塞,异步编程的思想。简单概括就是当遇到非常耗时的IO操作时,采用非阻塞的方式,继续执行后面的代码,并且进入事件循环,当IO操作完成时,程序会被通知IO操作已经完成。主要运用JavaScript的回调函数来实现。
多线程虽然也能解决高并发,但是是以建立多个线程来实现,其缺点是当遇到耗时的IO操作时,当前线程会被阻塞,并且把cpu的控制权交给其他线程,这样带来的问题就是要非常频繁的进行线程的上下文切换。
多线程到底什么是多线程?说起多线程我们首先从单线程来说。例如,我在这里看书,等这件事情干完,我就再去听音乐。对于这两件事情来说都是属于单线程,是一个完成了再接着完成下一个。但是我一般看书一边听歌,同时进行,这个就属于多线程了。在爬虫过程中,…
静态方法很好用,直接就可以用了,那么如果多线程调用怎么办?会出现什么?静态类中static修饰的参数,如果是全局变量,该变量会在方法中被修改。那么就是不安全的。原因是:多线程调用静态方法,会复制一份代码,所以方法是安全。但静态变量在java…
在学习的过程中,我发现了如题的这个有趣的问题。单继承不必解释,一个类只能有一个直接父类;但是对于接口的实现,一个类却能够实现多个接口。为什么是这种情况呢?我们来举个简单的栗子看一下:classA{publicvoidprint(){Syst…
java中提供类与类之间提供单继承。提供多继承会可能出现错误,如:一个类继承了两个父类,而两个父类里面都有show()方法。classFulei1{publicvoidshow(){System.out.println("父类1");}}c…
i++不是原子操作,也就是说,它不是单独一条指令,而是3条指令:1、从内存中把i的值取出来放到CPU的寄存器中2、CPU寄存器的值+13、把CPU寄存器的值写回内存如果是单线程操作,i++毫无问题;但是在多核处理器上,用多线程来做i++会有…
在最开始,我们要弄清楚node会什么会存在阻塞?node是这么标榜自己的:“在node中除了代码,所有一切都是并行执行的!”意思是,Node.js可以在不新增额外线程的情况下,依然可以对任务进行并行处理——Node.js是单线程的。也就是说…
Node.js是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。Node.js基本上所有的事件机制都是用设计模式中观察者模式实现…