# Futures in 8.4 cs and 8.4 bc

**URL:** <https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809>\
**Category:** Questions & Answers\
**Tags:** question\
**Created:** [March 19, 2022, 4:55pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809 "2022-03-19T16:55:41Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)\
**Post date:** [March 19, 2022, 4:55pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/1 "2022-03-19T16:55:42Z")

</div>

Hi

I have a program using futures.  
It runs very well with DrRacket 8.4 cs.  
With DrRacket 8.4 bc it seems to use one processor only.  
Is this a known problem?  
If not I can send the source code (about 500 lines)

Details: debugging off, Windows 10.

Best wishes, Jos Koot

---

<div class="post-metadata">

**Author:** ![ryanc](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/ryanc/32/71_2.png) [@ryanc](https://racket.discourse.group/u/ryanc)\
**Post date:** [March 19, 2022, 5:39pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/2 "2022-03-19T17:39:28Z")

</div>

One of the advantages of Racket CS is that more operations are future-safe. See the discussion in [racket/racket/src/thread/README.txt](https://github.com/racket/racket/blob/master/racket/src/thread/README.txt) for more information.

---

<div class="post-metadata">

**Author:** ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)\
**Post date:** [March 19, 2022, 6:45pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/3 "2022-03-19T18:45:34Z")

</div>

Thanks Ryan,  
That may explain things, although I don't see any unsafe operations in my code  
(proper lists and exact integers only)  
(no mutable objects, no hashes, no mpairs, no vectors, no boxes, no semaphores, no etc)  
Jos

---

<div class="post-metadata">

**Author:** ![ryanc](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/ryanc/32/71_2.png) [@ryanc](https://racket.discourse.group/u/ryanc)\
**Post date:** [March 19, 2022, 8:09pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/4 "2022-03-19T20:09:26Z")

</div>

Have you tried using the [futures visualizer](https://docs.racket-lang.org/future-visualizer/index.html) to see what operations your futures are blocking on?

---

<div class="post-metadata">

**Author:** ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)\
**Post date:** [March 19, 2022, 8:41pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/5 "2022-03-19T20:41:28Z")

</div>

I’ll try that,

Jos

 ![DC369554041A4649A528B20B10730B39.png](https://global.discourse-cdn.com/free1/uploads/racket/original/1X/2ad4c25f471d2cfc2782215e9bb5a535b2545175.png)

---

<div class="post-metadata">

**Author:** ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)\
**Post date:** [March 19, 2022, 9:04pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/6 "2022-03-19T21:04:54Z")

</div>

BC:

![9842F364F723414C916F2E049DB5D6CD.png](https://global.discourse-cdn.com/free1/uploads/racket/original/1X/8887d057cefdd70bdc8a8535deaf613eca294e5c.png)

CS

![C0D8CA652B0C4BA188EEE279BF48D6AE.png](https://global.discourse-cdn.com/free1/uploads/racket/original/1X/a05ed84c4012c914ed3b2c8f6d2c2622efcf79ee.png)

Is it the garbage collector that is blocking?

Thanks, Jos

 ![DC369554041A4649A528B20B10730B39.png](https://global.discourse-cdn.com/free1/uploads/racket/original/1X/2ad4c25f471d2cfc2782215e9bb5a535b2545175.png)

---

<div class="post-metadata">

**Author:** ![ryanc](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/ryanc/32/71_2.png) [@ryanc](https://racket.discourse.group/u/ryanc)\
**Post date:** [March 20, 2022, 10:41am UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/7 "2022-03-20T10:41:24Z")

</div>

It means it's blocking on the `+` operation. IIUC, in Racket BC `+` is only future-safe if it is inlined by the JIT and if only the fast (fixnum-only) path is executed.

In my experiments, using `+` in a higher-order way caused the future to block; for example: `(foldl + 0 xs)`. When I rewrote that to `(foldl (lambda (a b) (+ a b)) 0 xs)` then the future did not block. I had hoped that the compiler would inline `foldl` and put `+` in a direct-call position so the JIT can inline it, but it didn't. (Tested on Racket BC 8.1.)

---

<div class="post-metadata">

**Author:** ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)\
**Post date:** [March 20, 2022, 2:52pm UTC](https://racket.discourse.group/t/futures-in-8-4-cs-and-8-4-bc/809/8 "2022-03-20T14:52:48Z")

</div>

Hi Ryan,

Thanks for your clear explanation.

I tried some modifications to enhance inlining, but without luck.

I’ll use CS.

Thanks again, Jos

![A05275C433EC4658AD04B6A7586C7F72.png](https://global.discourse-cdn.com/free1/uploads/racket/original/1X/8ee32840a19a65d452c6afb8dc2804ae7ae28c70.png)
