fork并发编程 大家都说java不好学,到底难在哪呢?
大家都说java不好学,到底难在哪呢?
我觉得JAVA的难点在于广度!
大家都知道JAVA入门很容易。通过学习基本类型、基本操作、面向对象的思维和IO,就可以开发大部分JAVA程序!
那为什么难呢?以多线程为例,多线程可以通过简单的实现一个线程或者一个真正的Runnble接口来实现,但是我怕你误用线程造成性能问题,所以我给你一个完整的线程池来实现线程复用,但是线程池的创建有几种类型:singleton,动态,周期性任务执行!
而且用了多线程之后,因为线程共享资源,所以会有wire安全问题吧?我们做什么呢锁,同步锁,锁方法,锁对象,锁代码段,锁被锁,不得不说性能不好。做一个CAS和AQS实现重入锁!
这时,傲慢的人来了,说他没有 我不想锁它。我该怎么办?ThreadLocal给你每个线程一个变量好吗?所以数据不会互相影响!用BlockingQueue逐个处理总行吧!
多线程里还有CountDownBatch,valetile,parallel computing,FutrueTask,Forkjoin,都不是省油的灯!
上面说的多线程只是J.U.C包下的冰山一角,多线程只是JAVA下的冰山一角!
而且,JAVA开发最难的不仅仅是JAVA语言,还有JAVA生态。从事JAVA的人都知道以下几点:
搜索引擎有lucence,solr和elasticSearch!
数据库里有hibernate,mybatis,mycat,druid,canel!
缓存里有redis,memcache,ehcache!
消息中间件包括redis,activ
c 如何并行编程?
1.c没有专门的并行编程模式,但是可以多线程多进程模拟。2.例如,在linux下,可以使用fork函数来调用一个新进程。分叉函数是计算机程序设计中的分叉函数。返回值:成功调用一次,返回两个值,子进程返回0,父进程返回子进程标志;否则,错误返回-1。fork函数将正在运行的程序分成两个(几乎)相同的进程,每个进程进入过程启动一个线程,该线程从代码中的相同位置开始执行。这两个进程中的线程继续执行,就好像两个用户同时启动了应用程序的两个副本。函数原型pid_t fork( void) (pid_t是一个宏定义,本质是在# incultsys/types . HGT中定义了int)返回值:如果成功调用一次,则返回两个值,子进程返回0,父进程返回子进程ID;否则,错误返回到-1函数,表明现有的进程可以调用fork函数来创建新的进程。fork创建的新进程称为子进程。fork函数被调用了一次,但返回了两次。两次返回的唯一区别是子进程返回值0,而父进程返回子进程ID。子进程是父进程的副本,它将获得父进程的数据空间、堆、栈等资源的副本。注意,子进程持有一个 "复制 "的存储空间,这意味着父进程和子进程不共享这些存储空间。UNIX会把父进程地址空间的内容复制到子进程,所以子进程有一个独立的地址空间。在不同的UNIX (Like)系统下,无法确定fork之后是先运行子进程还是先运行父进程,这取决于系统的实现。所以你不应该。;移植代码时不要做任何假设。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。