The first big difference between NIO and IO is that IO is stream oriented, where NIO is buffer oriented.
IO being stream oriented means that you read one or more bytes at a time, from a stream. What you do with the read bytes is up to you. They are not cached anywhere. Furthermore, you cannot move forth and back in the data in a stream. If you need to move forth and back in the data read from a stream, you will need to cache it in a buffer first.
NIO's buffer oriented approach is slightly different. Data is read into a buffer from which it is later processed. You can move forth and back in the buffer as you need to. This gives you a bit more flexibility during processing. However, you also need to check if the buffer contains all the data you need in order to fully process it. And, you need to make sure that when reading more data into the buffer, you do not overwrite data in the buffer you have not yet processed.
source: http://tutorials.jenkov.com/java-nio/nio-vs-io.html#main-differences-between-java-nio-and-io
So I assume that worker is a thread which moves data from network to buffer, checks data consistency and notify when data were received & prepared. That's my guess and I'm not aiming to be completely right. The same question has guided me here.