多线程与单线程,异步与同步

多线程指多个程序线程并发执行,而单线程指单个线程执行。

异步表示执行任务a时,可以同时执行任务b而不被阻塞;同步则相反,同步表示执行任务a时执行任务b,此时任务a不能继续执行下去,必须等待任务a完成。

多线程既可以异步又可以同步,但是异步必须由多线程完成。

单线程不能异步。设想如果有一个线程能在不同的任务之间来回切换,那么这和多线程没有区别,多线程本身也是cpu的物理线程切换不同的程序线程,对于单核单线程cpu来说,同一时间也只有一个线程在运行。JavaScript号称单线程异步,其实是将要异步的程序交给了浏览器的其他线程,然后js主线程继续执行接下来的代码,等浏览器执行完异步任务后,会把结果放入列队,然后js再去处理这个列队。

Java synchronized 同步锁

java中可以利用锁锁住一些代码块,让同一时间只有一个线程访问共用一把锁的代码块。锁分为类锁和对象锁,类锁是静态的,跟随类,而方法锁是属于实例的。synchronized关键字表示告诉监视器此段代码加锁,其他线程不允许访问,类或者对象都只拥有一把锁,当某个线程正在运行某段加锁代码时,其他任何线程都不能运行类或对象的任何其他加锁代码。

继续阅读“Java synchronized 同步锁”

Windows下配置Nginx+PHP

1. 下载Nginx,将其解压到某处
2. 进入刚刚解压出来的nginx文件夹下conf\nginx.conf文件,将location ~ .php$整段取消注释

location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}


3. 找到PHP安装文件夹(我之前安装好的)CMD cd进去运行

php-cgi.exe -p 127.0.0.1:9000

4. 再次进入nginx文件夹CMD cd进去运行
start nginx 
5. 默认的网站文件夹是html文件夹,可以在里面创建一个phpinfo脚本运行测试有没有成功

Nginx只能处理html的网页,要想使用php,必须将流量转发到php-cgi所创建的端口上,也就是说Nginx只是一个反向代理,真正的web服务器其实是php-cgi。