32aab3b0b3
Motivation: The tail node reference writes (by producer threads) are very likely to invalidate the cache line holding the headRef which is read by the consumer threads in order to access the padded reference to the head node. This is because the resulting layout for the object is: - header - Object AtomicReference.value -> Tail node - Object MpscLinkedQueue.headRef -> PaddedRef -> Head node This is 'passive' false sharing where one thread reads and the other writes. The current implementation suffers from further passive false sharing potential from any and all neighbours to the queue object as no pre/post padding is provided for the class fields. Modifications: Fix the memory layout by adding pre-post padding for the head node and putting the tail node reference in the same object. Result: Fixed false sharing |
||
---|---|---|
all | ||
buffer | ||
codec | ||
codec-dns | ||
codec-haproxy | ||
codec-http | ||
codec-memcache | ||
codec-mqtt | ||
codec-socks | ||
codec-stomp | ||
common | ||
example | ||
handler | ||
license | ||
microbench | ||
tarball | ||
testsuite | ||
transport | ||
transport-native-epoll | ||
transport-rxtx | ||
transport-sctp | ||
transport-udt | ||
.fbfilter.xml | ||
.fbprefs | ||
.gitignore | ||
.travis.yml | ||
CONTRIBUTING.md | ||
LICENSE.txt | ||
NOTICE.txt | ||
pom.xml | ||
README.md | ||
run-example.sh |
Netty Project
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
Links
How to build
For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.
You require the following to build Netty:
- Latest stable Oracle JDK 7
- Latest stable Apache Maven
Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.
Branches to look
The 'master' branch is where the development of the latest major version lives on. The development of all other versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>
. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.