Twisted is designed for complete separation between logical protocols and physical transport layers supporting such stream-based semantics. Connection between a logical protocol and a transport layer happens at the last possible moment — just before information is passed into the logical protocol instance. The logical protocol is informed of the transport layer instance, and can use it to send messages back and to check for the peer's identity. Note that it is still possible, in protocol code, to deeply query the transport layer on transport issues. Naturally, such protocol code will fail if the transport layer does not support such semantics.
Deferreds
Central to the Twisted application model is the concept of a deferred. A deferred is an instance of a class designed to receive and process a result which has not been computed yet, for example because it is based on data from a remote peer. Deferreds can be passed around, just like regular objects, but cannot be asked for their value. Each deferred supports a callback chain. When the deferred gets the value, it is passed to the functions on the callback chain, with the result of each callback becoming the input for the next. Deferreds make it possible to operate on the result of a function call before its value has become available. For example, if a deferred returns a string from a remote peer containing an IP address in quad format, a callback can be attached to translate it into a 32-bit number. Any user of the deferred can now treat it as a deferred returning a 32-bit number. This, and the related ability to define "errbacks", allows code to specify in advance what to do when an asynchronous event occurs, without stopping to wait for the event. In non-event-driven systems, for example using threads, the operating system incurs premature and additional overhead organizing threads each time a blocking call is made.
Thread support
Twisted supports an abstraction over raw threads — using a thread as a deferred source. Thus, a deferred is returned immediately, which will receive a value when the thread finishes. Callbacks can be attached which will run in the main thread, thus alleviating the need for complex locking solutions. A prime example of such usage, which comes from Twisted's support libraries, is using this model to call into databases. The database call itself happens on a foreign thread, but the analysis of the result happens in the main thread.
Foreign loop support
Twisted can integrate with foreign event loops, such as those of GTK+, Qt and Cocoa. This allows using Twisted as the network layer in graphical user interface programs, using all of its libraries without adding a thread-per-socket overhead, as using Python's native library would. A full-fledged web server can be integrated in-process with a GUI program using this model, for example.
Applications using Twisted
The BuildBot continuous-integration system relies on Twisted for client/server communication.
ITA Software has developed an airline-reservation system for Air Canada that uses Twisted extensively.
SageMath, an open-source alternative to Mathematica, Maple, Magma, MATLAB, has a web-based interface, SageMath notebook, that runs on a Twisted server.
Twisted was used in the Omegle one-on-one chat service until it was replaced with gevent for performance reasons.
The Apple Calendar Server uses Twisted, as do some internal projects of NASA.