文章列表
高并发服务器开发原则
- 博客分类:
- java
1、linux 活跃连接数最大数与系统的内存及系统的句柄相关。一个连接系统就打开一个句柄,所以,若达到系统设置句柄数,则就不能再接收连接请求了。
2、非阻塞方法 epoll,select、pull
3、内存管理,一次分配大点的内存,多次分配内存,对系统性能有较大的影响
4、少用系统调用
5、少做内存拷贝,如读一个文件,则需文件用内核态拷贝至用户态,发送一个文件:则是从用户态拷贝到内核态的过程
java-线程(lock)
- 博客分类:
- java
1、synchronized 同步方法及代码块,锁JVM会自动释放,lock,则需要手工管理
try{lock.lock()}finally{lock.unlock()}
2、lock 提供了读锁、写锁,以提高性能.为了保证数据的一致性和完整性,需要读和写是互斥的,写和写是互斥的,但是读和读是不需要互斥的,这样读和读不互斥性能更高些
ReentrantReadWriteLock
private int data;// 共享数据
private ReadWriteLock rwl = new ReentrantReadWriteLock();
publi ...
要取到一个线程的返回值,则线程需要实现callable接口
返回值用future或futureTask来取得
public class FutureTaskTest {
public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
Callable<Integer> callable = new Callable<Integer>() {
public Int ...
java线程-线程池
- 博客分类:
- java
1.Executors.newFixedThreadPool 固定线程数
2、Executors.newCachedThreadPool 按任务数创建线程数
3、newSingleThreadExecutor 单线程
4、newScheduledThreadPool 按固定时间或周期性执行一个任务
publicstaticvoid main(String[] args) {
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
exec.scheduleAtFixedRate ...
java 多线程-生产消费者者模式
- 博客分类:
- java
独立写了一个生产消费者的模式,加强理解多线程编程及线程间的同步及信息交换。
要点:
1、在启动线程时,先需启动生产者。
2、生产者生产满了后,就不能再生产,进入等待状态,直到有消费者进行消费。
3、消费者进行消费时,若没有,则不能进行消费,进入等待状态。直到生产者生产了。
public class TestProduct {
public static void main(String[] args){
final Product pro = new Product();
ExecutorService service = Executors.newCachedThreadPool( ...
synchronized加在方法 上,锁定这个类的对象,加在静态方法上,锁定的是这个类。
volatile:可以对共享变量的值的改变直接反应在主内存中。
一个共享变量的操作步骤如下:
1、将主内存中的变量(java堆)值复制到工作内存中(操作数栈)
2、对共享变量进行操作
3、操作完成后,将共享变量存储到工作内存中
4、将共享变量存回到主内存中。