美文网首页
我与异步编程的故事

我与异步编程的故事

作者: 胖瘦馒头 | 来源:发表于2019-12-31 10:37 被阅读0次

我与异步编程的故事

在最开始学习Java的时候,就只会从上往下一把梭地写代码,代码的编写顺序跟其执行顺序保证完全的一样,直到一堂Java课上面老师提到了一个问题:计算机的CPU就跟一个个小人一样,每个小人都只能在同一时间做一件事情,这时候如果我们的代码里面都是同步地,自上而下地做一件事情,那么势必只会有一个小人在工作,其他小人就只能干瞪眼。既然计算机要搞这么多的CPU核数,肯定不会是为了好看的,如果我们能让我们的程序同时让所有的小人都进行工作,那工作效率将会大大提升。这时候我的编程世界中就多了异步的概念,最开始会写个new Thread().start()来开个新线程做事情(那个时候还一直搞不清这个Thread方法的run()方法和start()方法的区别是什么 ̄□ ̄|| ),但是后面就发现了一些问题:
两个线程的对于同一个变量的修改会有冲突问题,开了新线程之后,我主线程想获取这个新线程计算的结果该怎么办?如果我开的线程的数量远远大于我CPU核数的时候,我这些线程是如何进行工作的?
也是在后面的不断学习之中,了解了控制线程同步的方式:使用synchronized或者Lock进行加锁。了解到了并发编程之中的原子性,可见性,有序性等概念。
对于开了新线程之后,主线程想获取新线程计算的结果的问题,就引出了Future的概念,我们可以在开启新线程之后,将这个新线程的Future对象,在我们主线程做完其他的事情之后,同步阻塞地获取原先那个新线程的返回值。我在学习RPC的原理的时候,就有碰到过这个问题,在RPC传输层使用Netty在进行网络通讯的时候,因为一条Channel上面会有各种各样的请求,但是我们的每次请求都需要与其对应的返回值一一对应,这时候我们需要在发送方的数据包中新增RequestId的一个唯一Id,然后需要将其返回值封装为一个Future对象,然后服务方将这次请求处理完之后,在其对应的Response数据包中也需要添加Request请求数据包之中的那个唯一Id并返回给发起方之后,发起方根据这个唯一Id,在请求池中找到其对应的那个Future对象,并将其返回值设置到对应的Future对象之中,即完成了这次请求。
后面再深入了解NIO的时候,接触到了同步与异步,阻塞与非阻塞的概念,当时真的是一脸懵逼,感觉这些概念特别的绕,一直无法理解什么叫阻塞,什么叫非阻塞,后来在不断的了解中大概有了一些想法:同步和异步其实指的是,请求发起方对消息结果的获取是主动发起的,还是等被动通知的。而对于阻塞来说,通常指的是针对IO的操作,如网络IO和磁盘IO等。简单的来说就是我们调用了一个IO函数之后,当前线程是一直挂起直到IO操作完成,还是当前线程先去做其他事情,但是时不时去查看下当前的IO操作是否完成。

本次了解到华章图书出新书《Java异步编程实战》,因为我一直依赖对于异步编程都非常有兴趣,并且得知到本书中有关于反应式编程,以及中间件中关于异步的实现,这些也都是我非常感兴趣的部分,希望能从本书中得到相关知识的学习。最后,希望本书能够大卖!!

相关文章

  • 我与异步编程的故事

    我与异步编程的故事 在最开始学习Java的时候,就只会从上往下一把梭地写代码,代码的编写顺序跟其执行顺序保证完全的...

  • 读书笔记#Java异步编程实战-上

    Java异步编程实战 chap1 认识异步编程 异步编程概念与作用在使用同步编程方式时,由于每个线程同时只能发起一...

  • 为什么要使用异步 PHP

    同步编程与异步编程的区别 在讨论异步 PHP 的优点之前,让我们快速回顾一下同步编程模型和异步编程模型之间的区别。...

  • 深入了解下Promise

    Promise 意义 Promise 的诞生与 Javascript 中异步编程息息相关,js 中异步编程主要指 ...

  • JS基础知识储备(异步编程,promise,Eventloop机

    一、异步编程 1、异步的概念 异步(Asynchronous, async)是与同步(Synchronous, s...

  • js回调与异步编程

    回调与异步编程 一、回调函数的使用场景 异步编程。 事件监听、处理。 setTimeout、setInterval...

  • 1-1作业参考答案

    模块一:函数式编程与 JS 异步编程、手写 Promise参考答案 简答题 一、谈谈你是如何理解 JS 异步编程的...

  • ES6学习--异步编程--Generator

    异步编程 : (异步编程的语法目的就是让异步编程更像同步编程) 回调函数利用回调函数实现异步编程本身没有问题, 问...

  • JavaScript 异步编程

    同步模式与异步模式 时间循环与消息队列 异步编程的几种方式 Primise异步方案 宏任务 /微任务队列 Ge...

  • 认识异步编程

    认识异步编程 本章主要介绍异步编程的概念和作用,Java中异步编程的场景以及不同异步编程场景应使用什么技术实现。 ...

网友评论

      本文标题:我与异步编程的故事

      本文链接:https://www.haomeiwen.com/subject/cokboctx.html