The asynchronous push&pull protocol, a randomized distributed algorithm for spreading a rumour in a graph G, is defined as follows. Independent exponential clocks of rate 1 are associated with the vertices of G, one to each vertex. Initially, one vertex of G knows the rumour. Whenever the clock of a vertex x rings, it calls a random neighbour y: if x knows the rumour and y does not, then x tells y the rumour (a push operation), and if x does not know the rumour and y knows it, y tells x the rumour (a pull operation). The average spread time of G is the expected time it takes for all vertices to know the rumour, and the guaranteed spread time of G is the smallest time t such that with probability at least 1 – 1/n, after time t all vertices know the rumour. The synchronous variant of this protocol, in which each clock rings precisely at times 1, 2,…, has been studied extensively. We prove the following results for any n-vertex graph: in either version, the average spread time is at most linear even if only the pull operation is used, and the guaranteed spread time is within a logarithmic factor of the average spread time, so it is O(n log n). In the asynchronous version, both the average and guaranteed spread times are Ω(log n).We give examples of graphs illustrating that these bounds are best possible up to constant factors. We also prove the first theoretical relationships between the guaranteed spread times in the two versions. Firstly, in all graphs the guaranteed spread time in the asynchronous version is within an O(log n) factor of that in the synchronous version, and this is tight. Next, we find examples of graphs whose asynchronous spread times are logarithmic, but the synchronous versions are polynomially large. Finally, we showfor any graph that the ratio of the synchronous spread time to the asynchronous spread time is O(n2/3).