я кулачок через ниже примера асинхронного computatiton:Когда использовать асинхронное вычисление?
//Create an Asynchronous channel. No connection has actually been established yet
AsynchronousSocketChannel asynchronousSocketChannel = AsynchronousSocketChannel.open();
/**Connect to an actual server on the given port and address.
The operation returns a type of Future, the basis of the all asynchronous operations in java. In this case, a Void is returned because nothing is returned after a successful socket connection
*/
Void connect = asynchronousSocketChannel.connect(new InetSocketAddress("127.0.0.1", 5000)).get();
//Allocate data structures to use to communicate over the wire
ByteBuffer helloBuffer = ByteBuffer.wrap("Hello !".getBytes());
//Send the message
Future<Integer> successfullyWritten= asynchronousSocketChannel.write(helloBuffer);
//Do some stuff here. The point here is that asynchronousSocketChannel.write() returns almost immediately, not waiting to actually finish writing the hello to the channel before returning control to the currently executing thread
doSomethingElse();
//now you can come back and check if it was all written (or not)
System.out.println("Bytes written "+successfullyWritten.get());
Я новичок в асинхронные вычисления. Но то, что я понимаю из приведенного вами примера, заключается в том, что целая цель делать асинхронно - это распараллеливать операции. Как и в случае, когда мы делали вещи синхронно write() и doSomethingElse(), случалось бы серийно. Поэтому важными свойствами выбора асинхронных вычислений являются:
1) doSomethingElse() не должен зависеть от вывода write().
2) write() и doSomethingElse() оба должны занимать много времени, иначе нет распараллеливания. Правильно?
Пожалуйста, исправьте меня в случае, если мое понимание неверно, и есть нечто большее, что мы достигаем за счет асинхронных шагов в вычислении.
Также вы можете представить наиболее распространенный вариант использования асинхронных вычислений.
Uh, асинхронный ввод-вывод и асинхронные вычисления не обязательно соединяются вместе ... – fge
Да, вы, кажется, повесили его, потому что канал асинхронен, вы можете что-то сделать, когда он пишет данные, то, что вы делаете, тем временем не должно полагаться на результат асинхронной задачи, и, действительно, если это не занимает много времени, вы просто добавляете ненужные накладные расходы. – FrederikDS