Skip to content

Instantly share code, notes, and snippets.

@ciniglio
Last active August 29, 2015 14:13
Show Gist options
  • Save ciniglio/aa5544b967d920e1fce8 to your computer and use it in GitHub Desktop.
Save ciniglio/aa5544b967d920e1fce8 to your computer and use it in GitHub Desktop.
Doall and parallelism
;; fake-io is a function that returns a promise and sets a future to deliver a random int after 5 seconds
user> (time (doall (take 3 (map deref (map (fn [_] (fake-io)) (vec (range 1000)))))))
"Elapsed time: 5006.289 msecs"
(183 475 390)
user> (time (doall (take 32 (map deref (map (fn [_] (fake-io)) (vec (range 1000)))))))
"Elapsed time: 5003.565 msecs"
(12 45 407 497 446 329 398 80 134 286 351 136 307 170 324 288 197 357 337 481 462 480 324 468 304 141 328 247 445 118 211 0)
user> (time (doall (take 33 (map deref (map (fn [_] (fake-io)) (vec (range 1000)))))))
"Elapsed time: 10008.503 msecs"
(423 149 412 365 330 317 237 202 436 182 276 113 462 346 461 422 9 161 19 201 262 111 198 130 139 174 222 254 493 1 221 16 93)
;; The below illustrates why you should introduce an internal `doall`
user> (time (doall (take 33 (map deref (doall (map (fn [_] (fake-io)) (vec (range 1000))))))))
"Elapsed time: 5010.8 msecs"
(39 313 86 209 328 80 45 31 22 65 300 177 79 4 211 52 467 332 345 328 240 479 330 146 30 285 218 102 237 312 0 32 370)
user> (time (doall (take 303 (map deref (doall (map (fn [_] (fake-io)) (vec (range 1000))))))))
"Elapsed time: 5006.03 msecs"
(98 491 417 95 266 228 494 167 361 156 100 34 422 45 129 411 123 311 277 275 8 319 114 226 439 316 392 154 341 158 457 252 197 493 168 157 51 203 277 476 140 467 37 257 249 291 287 231 225 188 60 199 16 52 374 452 265 399 24 106 463 189 182 305 215 330 50 146 306 84 301 302 391 57 294 446 326 147 171 303 150 64 136 133 358 13 364 221 165 223 328 143 336 13 24 306 394 382 49 403 475 462 205 82 437 380 456 59 252 274 77 112 136 387 77 470 201 324 492 140 263 138 343 42 323 119 361 124 407 188 277 89 495 410 256 259 288 74 444 320 30 104 85 469 93 379 78 325 337 74 299 55 482 192 180 163 175 49 56 1 116 365 421 117 221 64 100 395 263 166 286 243 380 473 327 324 378 374 285 421 9 354 82 477 495 185 51 101 21 172 146 11 33 283 225 256 209 38 331 377 124 238 143 415 345 480 218 409 122 398 379 420 448 362 173 196 65 374 333 367 256 204 57 406 328 319 32 409 15 2 298 147 481 402 487 123 419 319 239 168 390 72 351 475 492 386 431 226 337 136 269 330 113 49 205 116 438 100 99 487 491 98 187 312 58 73 414 222 477 156 57 256 182 428 478 17 17 95 253 352 167 370 150 287 474 125 143 414 391 11 352 279 205 400 396 209 166 431 310 58 282 22 311)
;; Maybe pmap will help?
user> (time (doall (take 303 (map deref (pmap (fn [_] (fake-io)) (vec (range 1000)))))))
"Elapsed time: 50027.344 msecs" ;; thats 50s
(169 430 38 162 118 347 113 393 334 226 44 113 157 296 170 65 425 493 99 494 146 172 120 133 130 230 216 142 350 141 147 251 254 85 54 478 493 97 383 417 263 12 83 277 176 473 499 1 389 191 361 129 400 227 287 310 472 346 387 417 442 380 390 225 441 125 107 140 287 308 323 283 220 323 59 49 191 139 333 158 301 398 282 467 336 150 48 182 381 334 190 432 249 271 446 47 343 399 457 361 93 190 57 312 40 100 134 487 325 238 146 200 396 450 28 484 340 297 157 250 357 420 103 112 282 183 471 33 359 36 89 362 52 233 322 479 272 342 129 52 473 176 431 186 277 388 96 215 449 370 145 304 54 317 223 230 338 264 295 178 132 446 474 108 138 371 341 327 337 89 272 2 242 48 472 428 412 86 429 65 495 162 463 450 4 438 399 49 91 18 139 491 292 343 85 230 275 186 9 252 279 71 318 376 297 115 317 389 123 300 26 363 292 352 435 347 279 294 270 418 294 150 189 429 321 53 309 390 295 411 387 64 154 342 118 54 310 441 248 282 40 61 317 38 475 334 170 295 182 121 41 326 62 423 225 39 353 368 398 131 371 246 257 324 423 57 481 202 222 254 394 291 280 164 392 94 137 54 470 227 331 461 391 329 356 288 252 0 230 386 6 375 239 40 102 26 299 315 399 273 107 196 266)
user> (time (doall (take 33 (map deref (pmap (fn [_] (fake-io)) (vec (range 1000)))))))
"Elapsed time: 10004.008 msecs"
(381 21 413 411 485 407 350 6 419 88 148 243 41 390 164 25 52 163 233 430 344 49 489 7 356 243 179 413 234 287 277 312 194)
;; Nah
user> (time (doall (take 33 (map deref (doall (pmap (fn [_] (fake-io)) (vec (range 1000))))))))
"Elapsed time: 5006.465 msecs"
(69 421 69 471 412 475 131 46 254 450 276 308 442 303 107 257 471 121 348 210 110 445 98 232 259 469 369 102 181 37 237 219 28)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment